【发布时间】:2012-04-14 02:22:15
【问题描述】:
我的多线程应用程序从 HD 中获取一些文件,然后处理这些文件中的数据。我重用了一个类的同一个实例(dataProcessing))来创建线程(我只是改变了调用方法的参数)。
processingThread[i] = new Thread(new ThreadStart(dataProcessing.parseAll));
我想知道原因是否可能是所有线程都从同一内存读取。
处理每个文件大约需要半分钟。由于文件只有 200 KB,因此可以快速读取。处理完文件后,我将所有结果写入一个目标文件。我认为问题不在于读取或写入磁盘。所有线程都在处理任务,但由于某种原因,处理器没有被充分利用。我尝试添加更多线程以查看是否可以达到 100% 的处理器使用率,但它会减慢并减少处理使用率,而不是完全使用它。任何人都知道可能出了什么问题?
【问题讨论】:
-
这个过程怎么让你觉得瓶颈是CPU?
-
好吧,当我调试应用程序时,我看到所有线程“都在做某事”。事实上,我使用更多线程可以获得一些时间,但如果我添加太多,性能会下降。
-
我认为需要更多信息。所有这些任务都写回同一个文件,因此这可能是瓶颈。 30 秒来处理 200KB 的数据表明除了 CPU 绑定进程之外的其他东西......
-
不,先生,我正在对信息运行一个复杂的算法。即使我什么都不写,也达不到处理器使用率的 100%。
-
您只能同时运行与核心数量一样多的线程,因此在某些时候额外的线程会争夺时间,从而降低性能。
标签: c# multithreading performance parallel-processing