假如我有1000000个数据,想用多线程处理(调用同一处理方法),目的是想提高处理能力.但本人写的测试发现处理速度并不比不用多线程快,请高手们帮我看看,照我的写法贴个代码出来看看public static int n=20000;
public void begin()
{
Thread thr=new Thread(new ThreadStart(write));
thr.Start();
}
public void write()
{
Thread[] threadarray =new Thread[5];
for(int i=0;i<5;i++)
{
threadarray[i]=new Thread(new ThreadStart(testwrite));

threadarray[i].Name="ithread---"+i.ToString();
threadarray[i].IsBackground=true;
threadarray[i].Start();
}

for(int i=0;i<5;i++)
{
threadarray[i].Join();
}

}
public void testwrite()
{
while(n>0)
{
lock(typeof(bool))
{
if(n<0)
{
if(Thread.CurrentThread.IsAlive)
{
Thread.CurrentThread.Abort();
}
}
Console.WriteLine(n.ToString()+"***"+Thread.CurrentThread.Name.ToString());

Thread.Sleep(1);
n--;
}
}
}

解决方案 »

  1.   

    “lock(typeof(bool))”你这句话,即所有的线程操作其中的临界区,都需要互斥,有线程使用就需要等待,所以和单线程的效率是一样。
      

  2.   

    把testwrite函数改成下面这样,无锁结构就快很多public void testwrite()
    {
    int tick1 = Environment.TickCount;
    while(n>0)
    {
    // lock(typeof(bool))
    // {
    if(n<0)
    {
    if(Thread.CurrentThread.IsAlive)
    {
    Thread.CurrentThread.Abort();
    }
    }
    Console.WriteLine(n.ToString()+"***"+Thread.CurrentThread.Name.ToString()); Thread.Sleep(1);
    int tmp = n;
    tmp --;
    n = tmp;
    //n--;
    // }
    }
    int tick2 = Environment.TickCount;
    Console.WriteLine( (tick2 - tick1).ToString() );
    }
      

  3.   

    楼主的问题不是程序的问题,而是对线程概含不清晰的问题Knight94(愚翁)说得很有道理,并不是线程多速度就能快的
      

  4.   

    serversql(啊初) 正解。
    多线程会增加线程创建开销,不快反慢。多线程要有它适合使用的地方。
      

  5.   

    多线程在多cpu的机器上才会快,单cpu上还不如用单线程
      

  6.   

    lushawen(文仔)  这样来处理的话效率相信可以提高几倍   局域网的传送文件。
    =======================================
    我觉得你这样 根本不能提高效率
    多线程应该不是用在这些地方的。
      

  7.   

    lock 去掉,否则每次只能进入一个线程,理论上比一个独立的线程慢...
      

  8.   

    所有的线程只是为了操作一块数据..不必让每个线程都处理一次..最好的办法是分快..将数据分为N块..用N个线程处理..处理完毕之后,使用事件类通知主线程,最后将结果返回给主线程处理合并结果..这个时候,你再看看结果就明白了..线程操作共享数据的时候,用lock即阻塞其他线程访问该资源..尽量避免lock独占锁.而应该采用算法分解资源..