【发布时间】:2012-08-12 15:21:44
【问题描述】:
我正在调查完成特定操作需要多少时间。操作如下:
Parallel.ForEach(items, item => SaveScheme(item));
SaveScheme 方法适用于数据库:执行一些查询并使用信息。 items 集合中的元素数量可以足够大。
当我运行此操作时,大约需要 20-40 秒才能完成。但是当我在打开分析的情况下运行它时,只需要 3 秒!
我没有找到有关此问题的任何信息。我唯一的猜测是,使用 profiling Parallel.ForEach 会比没有它创建更多的线程,但我不确定,即使它是真的,我也不知道如何处理它。
那么,为什么会发生这种情况?当我在不进行分析的情况下运行应用程序时,如何才能获得这种性能?
UPD。 Parallel 与此无关:我用简单的foreach 进行了测试,但操作仍然在 3 秒内完成!
【问题讨论】:
-
hmm 奇怪,居然会变慢……
-
您尝试过并发可视化工具吗?
-
我尝试了并发可视化工具,但我在那里看到的并没有告诉我什么。我知道有多少线程等等,但是没有分析器我不知道当操作需要 40 秒时会发生什么。所以,我无法比较。
-
您确定数据库在这两种情况下都以完全相同的方式(速度、结果集)响应并且没有使用缓存结果或准备好的语句吗?
标签: c# .net performance parallel-processing profiling