现在的CPU一般都支持超线程吧?最多能分配多少个线程?
利用别的核心计算是不是效果会更好?
同时计算9个线程会不会计算量很多呢?
这些问题很伤脑筋
还有万一有个很老的电脑在运行你的程序该怎么办呢?

解决方案 »

  1.   

    如果1个线程就占用100% cpu的话,不用开太多个线程了。
    两个,一个UI,一个Worker thread.
      

  2.   

    是否可以这样 先检测CPU有几个核心
    核心多的话 先分配核心 让线程平均分配些
      

  3.   

    线程你得分情况。计算密集型的应用,就一个核心一个线程。瓶颈不在CPU的话,线程多也一样,比如扫描局域网的程序,单核CPU开10线程和100线程,CPU也不是爆满。
      

  4.   

    单核CPU开10线程和100线程,CPU也不是爆满
    你是说效果都一样 都是爆满是吧
      

  5.   

    多线程,主要是想提高程序的可伸缩性。例如,有很多任务需要并行进行,那么可能需要多线程。
    多线程实际上是一个假象,就是说,因为CPU的时间总是有限的,那么CPU需要频繁地切换,在某个时间执行某个线程的任务。这种情况,如果用的不好,反而增加了CPU的负担,降低了系统性能。
    直接创建Thread对象,并且调用它的Start方法
    使用ThreadPool.QueueUserWorkItem方法
    使用BackgroundWorker
    Parallel.For - for 循环的并行运算   
    Parallel.ForEach - foreach 循环的并行运算   
    Parallel.Invoke - 并行调用多个任务   
    Task - 任务,基于线程池。
    PLINQ - 用于对内存中的数据做并行运算 
      

  6.   

    我分配过1000个,双核CPU。用的循环1000次。
    系统反映速度稍微慢了些。
      

  7.   

    -------------
    你说的没错,可是现在是多核CPU时代了,线程在不同的核心运行,程序运行的速度必然会加快
      

  8.   


    和c#无关,一个进程可以创建255个线程,包括ui线程。
    线程不是越多越快,就一个cpu的话,大量计算工作一般不分线程处理,线程调度需要时间,线程的目的是有效的利用线程的闲时做其他事情。
      

  9.   


    我记得2.0下,大概就是255这个数。但是.NET并不做特别限制,可以突破这个书目,如下:            ThreadPool.SetMaxThreads(350, 350);由于你自起的线程在后台也会放入池中,所以上面的代码就可以达到突破这个限额。不过,问题的关键是,如果你程序含那么多线程,估计就得考虑下是否设计合理
      

  10.   

    线程可以开N多。只要你的cpu承受的了