.NET中的并行性

6
我被要求展示并评估并行性的优点和局限性,以决定是否在我们公司使用。我们主要是一个数据导向型的业务,基本上从数据库中加载对象,然后经过一些业务逻辑处理后,显示给用户,最后保存回数据库。在我的看法中,这个流程中没有太多可以从并行运行中受益的地方,但由于我对这个概念还比较新,可能完全错误。这个简单的流程中是否有任何部分可以从并行运行中受益?如何实施这种编程风格的指南有哪些?
此外,是否有任何工具(最好是随VS2010附带的)可以显示瓶颈发生的位置,并能够在我点击“Go”运行一个给定数量的循环(预先编写的简单数学循环,例如从1到1000的整数i - 进行一些计算),在并行和串行中可视化显示正在发生的情况?
我需要使用一个不错的分析工具来显示差异。
5个回答

4

是的,即使从那个简单的模型中,你也可以极大地受益于并行处理。

例如,在加载数据时,你可能会执行以下操作:

foreach(var datarow in someDataSet)
{
    //put your data into some business objects here
}

你可以通过并行处理来优化此过程,方法如下所示:
Parrallel.ForEach(someDataSet, datarow =>
{
    //put your data into some business objects here
});

根据您所处理的数据量大小,这可能会极大地提高您的性能。

现在,每个数据行将异步处理,而不是像typical foreach循环一样按顺序处理。

我建议您对这个简单的示例运行一些简单的性能测试,并查看您获得的结果。在电子表格或其他软件中绘制出来,并向您的团队展示。您可能会惊讶于您得到的结果。


谢谢@Joseph。我一直在想Parallel.ForEach是否会改善甚至是简单对象循环的性能。我创建了一个应用程序,根据我创建的一些循环来绘制时间结果,并根据要运行的核心和是否并行系列运行这些循环,并在.Net 4.0 VS2010图表上显示这些结果。然而,我的老板希望我使用现有的分析工具来展示幕后发生的事情。有没有一种有效的工具可以展示这个? - Ben
@Ben ANTS Profiler是一个检查性能的好工具,但它只是众多工具中的一个。事实上,关于性能工具的问题在SO上有很多,可能会为您提供更完整的列表。 - Joseph

1

实现缓存层(分布式或其他)可能比并行化当前的流程更有益。

通过缓存层,您经常使用的对象将驻留在内存中的缓存中,从而实现更高的读/写性能。有许多选项可用于保持缓存同步,这些选项将因您选择的供应商而异。

我建议您查看MemCachedNCache,看看它们是否适合您。

编辑:就性能分析工具而言,我广泛使用dotTrace,强烈推荐。您可以从JetBrains的网站下载30天的试用版。


1

1
可能吧,但是我通常对这种问题的一般回答是 - 你的应用程序中是否存在任何性能问题?如果有,那么可以调查原因并考虑并行执行是否有助于解决问题。如果没有,则最好将时间花在其他方面。

0

你有没有看过微软的使用托管代码进行并行计算网站?它包含了几篇文章,讨论了实现指南,介绍了何时以及如何使用 .Net 4 的并行特性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接