首先写如下一个控制台小程序;
namespace demo1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello,World!");
Console.ReadLine();
}
}
}
然后用任务管理器查看其线程数;
任务管理器处在别的选项卡时 查看 菜单下面是没有 选择列 菜单的;
切换到 进程 选项卡,才有 选择列 菜单;
点击 选择列 菜单;在弹出的对话框中选中 线程数;确定;
然后可以看demo1的线程数;张银奎老师著《软件调试》言此时线程数是3,我的目前是4;
过了一阵,demo1的线程数目又自己变成了7;这是咋回事;
VS默认是托管调试;如果选中项目属性的 启用非托管代码调试 ;则可进行混合调试;
还是使用托管调试;从VS启动demo1,程序停在Console.ReadLine()时,准备用windbg附加到进程;然后观察线程;
启动windbg,进程列表只有demo1.vshost.exe;没有demo1.exe;
选中 demo1.vshost.exe ,附加;谁知弹出如下对话框;下次再搞;
下面用ProcessExplorer来观察线程;
从vs启动调试demo1.exe,进程列表只有demo1.vshost.exe;
看一下他的线程情况;
再单独启动demo1.exe看一下情况;
clr.dll是 .net 的运行环境;
托管程序有三个线程:
与内存回收密切相关的终结器线程;支持调试的辅助调试线程;然后就是程序自己的初始线程;
我曾在项目上用过ProcessExplorer,比较有效;当时参与一个 短彩信群发业务(SGIP协议) 项目,见此;
https://blog.youkuaiyun.com/bcbobo21cn/article/details/90487493
当时短信群发程序有长连接和短连接,还有单连接和多连接;
单连接和多连接是指线程数;收发双方都是套接字程序;单连接就是指收发双方程序都是单线程;
如果程序支持多连接,当发的一方开5个线程发送,则收的一方会自动开5个线程接收;
当时判断本地联通的短信接收程序是不支持多连接的,但是最好用技术手段验证;
用ProcessExplorer观察线程数;发送程序增加5或几个线程发送,在ProcessExplorer里就看到,发送程序的线程数增加了几个;同时用ProcessExplorer查看接收程序线程数,不论发送程序新开5或多个线程发送,接收程序的线程数是不变的;故可知本地联通的短信接收程序是不支持多连接的。