我被要求展示Parallelism的好处和局限,并对其进行评估,以便在我们公司内部使用。我们主要是面向数据的业务,实质上是从数据库加载对象,然后通过一些业务逻辑,显示给用户,然后保存回数据库。在我看来,管道中并没有太多可以从并行运行中获益,但对于这个概念来说还是比较新的,我可能完全错了。这条简单的管道是否会受益于并行运行?有没有关于如何实现这种编程风格的指南?
此外,是否有任何工具(最好是VS2010附带)可以显示瓶颈出现的位置,并且能够直观地显示当我在运行给定数量的循环的简单应用上单击“Go”时发生了什么(预先编写简单的数学循环,例如对于i作为整数= 1到1000 - 做一些计算)并行,然后串联?
我需要能够使用体面的分析工具来显示差异。
答案 0 :(得分: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
});
这可以大大提高您的效果,具体取决于您在此处理的数据量。
现在,每个数据行将以异步方式处理,而不是像典型的foreach循环那样按顺序处理。
我建议你在一个简单的例子上运行一些简单的性能测试,看看你得到了什么样的结果。将其绘制在电子表格或其他内容中,并将其显示给您的团队。你可能会对你得到的结果感到惊讶。
答案 1 :(得分:1)
实施缓存层(分布式或其他方式)可以获得比并行化当前管道更多的好处。
使用缓存层时,您经常使用的对象将驻留在内存缓存中,从而实现更高的读/写性能。有许多选项可以使缓存保持同步,这些选项将根据您选择的供应商而有所不同。
我建议您查看MemCached和NCache,看看您认为它们是否合适。
编辑:就分析工具而言,我已广泛使用dotTrace并强烈推荐它。您可以从JetBrains的网站下载30天的试用版。
答案 2 :(得分:1)
当然,有许多任务可以并行化,详细的分析可以帮助,但瓶颈可能是候选人 这些材料可以帮助您Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4
答案 3 :(得分:1)
可能,但我对此类查询的一般回应通常是 - 您的应用程序中是否存在任何性能问题?如果是,则通过各种方式调查原因并考虑并行执行是否有帮助。如果没有,那么时间可能最好花在其他地方。
答案 4 :(得分:0)
您是否查看过Microsoft的Parallel Computing with Managed Code网站?它包含几篇关于实施指南的文章,讨论何时以及如何使用.Net 4的并行功能。