大家好.我用C#开发了一个多线程程序,但这个多线程在Debug编译下可以并发出来,可是在Release下却不可以.是不是在Release模式下编译一些代码被编译器"优化"了? 我该怎么做才可以在Release模式下并发出多线程工作?还有一个大问题.为什么我的多线程在Debug模式下开了大概20个线程CPU就被100%使用了(电脑4是个CPU的,功能很强大的)?C#对多线程的并发数是怎么控制的?

解决方案 »

  1.   

    1)debug下运行有个托管exe,这个可从任务管理器看到
    2)在线程中适当得Sleep,特别是没有任务时,可以降低CPU占用
    3)线程池(ThreadPool)管理可以更高效率
      

  2.   

    ...是不是在Release模式下编译一些代码被编译器"优化"了?
    虽然有优化,但因该不会影响多线程。可能要有代码才能分析。...C#对多线程的并发数是怎么控制的
    CLR的线程池倒是有个最大线程数的限制,不过如果你用new Thread()而不用线程池倒没有什么限制。...为什么我的多线程在Debug模式下开了大概20个线程CPU就被100%使用了
    如果你的线程是计算密集型的,4个线程就可以让4核的CPU满负荷了。
    如果你的线程大部分等在IO等待,事件等待上,则不应该出现100%CPU状况。
      

  3.   

    关于CPU利用率,线程的占用跟CPU的线程是对应的如果是4枚处理器,处理器是单核的,4个满负荷的单线程应用令CPU占用达到100%如果是4枚处理器,处理器是双核的,8个满负荷的单线程应用令CPU占用达到100%如果是2枚处理器,处理器是四核的,8个满负荷的单线程应用令CPU占用达到100%单线程应用可以用MS的计算器来模拟,运算一个大数的阶乘即可
      

  4.   

    如果是4枚处理器,处理器是六核的,而且支持超线程,48个满负荷的单线程应用令CPU占用达到100% 
      

  5.   


    线程执行过程中,适当加上sleep,可以降低CPU占用。
      

  6.   

    哎.谢谢大家了.我的线程都是在等待网络的返回数据.有办法让在等待的Socket出来,
    必要时再接收吗?记得是几是个Socket一起工作的.
      

  7.   

    看你问题是想用多线程来接收SOCKET数据吧,我前段时间做过这方面的东西,可能具体说说你的问题或者说流程
    我感觉是你的流程出了问题,我的程序也是8个客户端,1周不关,程序占CPU30左右