public string deal(str)
{
  foreach (string str3 in str.Split(new char[] { '\n' }))
              {                  Monitor.Enter(str3);
                  string strLine = str3;
                  if (strLine.IndexOf(",") < 0)
                  {
                      continue;
                  }                  if (this.FindData(ref strLine))
                  {
                      string[] strArray2 = strLine.Split(new char[] { ',' });                      //这里需要不需要加锁?
                         object obj = this.sortlist[strArray[1]];
                              if (obj != null)
                              {
                           this.sortlist[strArray[1]]= strArray[2];
                               }
                             else
                             {
 
                      this.sortlist.add(strArray[1],strArry[2]);
                               }
                 }
             }
}如何多线程做呢?多线程做有没有优势?我的设想是每一个线程处理一个STR3,this.sortlist需要不需要加锁,Sortlist已异步化。

解决方案 »

  1.   

    ?同一问题发两遍。如果这是一个服务器,可能同时会有几个用户要在这里处理排序任务,这可以考虑用线程。线程可以与进程中的其他线程共享数据,如果这种共享是多余的或是有危险的就完全没理由用。来自百度,很基础
    线程的缺点
      线程自然也有缺点,以下列出了一些:
       ·如果有大量的线程,会影响性能,因为操作系统需要在他们之间切换;
       ·更多的线程需要更多的内存空间
       ·线程会给程序带来更多的bug,因此要小心使用
       ·线程的中止需要考虑其对程序运行的影响
       ·通常块模型数据是在多个线程间共享的,需要一个合适的锁系统替换掉数据共享
      

  2.   

    多线程做同一个事情,如果事情多的可以分块。则好说,如果本身一个循环就不长,多线程反而慢。
    2010里的System.Threading.Task命名空间下有并行处理类。