在主窗口创建一个线程
这个线程动态加载个dll
实例化一个类
执行类的方法
这个方法里种总执行一是:for循环动态创建了多个线程执行任务(总计500多个线程):7分多钟二是:for循环不创建线程 而是一个一个执行 直到for出以后:8分多钟2种方法执行时间相差不大,
理论上来说第一种应该很快才对 至少不会跟第2种相差一点点吧不知道我这样做法对不对,?没有效果的原因是什么。。?

解决方案 »

  1.   

    线程不是越多越好,如果太多线程在运行,操作系统或者.Net虚拟机需要频繁的在多个线程中切换,因为CPU不会有500个,所以操作系统需要把CPU轮流分配给这500线程,这个工作开销也很大,所以线程数目最好等于CPU数目,或者等于CPU数目-1,这样切换CPU的开销就很小,多线程程序最好设计成固定线程数目,比如你有500个任务要去执行,但只按CPU数目创建4个线程,这4个线程从各自的任务队列中取出任务来执行,把500任务平均分到4个线程任务队列中,
      

  2.   


    这方面“理论”总是跟现实出入太大。使用线程,是因为你的CPU时间有很多空闲,不是空洞地说“该用几个”线程的问题。你的进程中(仅仅你的进程中)某一个时间点,可能有5个线程、200个线程、1000个线程(任务线程+I/O线程)都可能是合适的。只要是CPU持续一段时间有空闲,这就说明线程少了。反之就多了。你要是能够把CPU一直保持80%~90%以上的利用率,让它热得可以用来煮鸡蛋,就是能耐。
      

  3.   

    支持这个方法!
    for循环应该放在线程中执行吧!
      

  4.   

    谢谢楼上位朋友热心解答!1楼的朋友 我不知道你说的cpu数量是指具体的cpu数量?一般电脑都是1个cpu的,不会只运行1个线程吧?回6楼朋友 我线程主要是采集入库回7楼朋友 我是在主窗体创建个线程 加载dll的方法里 再用for循环建立多个线程的就是我现在有个疑问 我主窗体创建的一个线程 跟 我dll里方法的创建的线程应该是同步运行的吧?
      

  5.   


    CPU数就是操作系统看到的处理器数目,现在虽然多是一个物理CPU,但都是多核CPU,一个核算一个CPU,Intel I3/I5/I7系列使用超线程技术,一个物理核心可以模拟成两个核心,也可以按照一个模拟的核心算一个CPU,比如I3是两核4线程,可以算4个CPU,
      

  6.   

    单核单CPU,跑多线程程序一般情况下不会比单线程效率高,