图解观察托管程序线程

首先写如下一个控制台小程序;

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或多个线程发送,接收程序的线程数是不变的;故可知本地联通的短信接收程序是不支持多连接的。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值