C# Net中的并行性

C# Net中的并行性,c#,.net,vb.net,parallel-processing,C#,.net,Vb.net,Parallel Processing,我被要求展示并行性的优点和局限性,并对其进行评估,以便在我们公司内使用。我们主要是面向数据的业务,本质上是从数据库加载对象,然后通过一些业务逻辑将它们显示给用户,然后保存回数据库。在我看来,这条管线中没有太多东西可以从并行运行中获益,但由于对这个概念还比较陌生,我可能完全错了。这条简单的管道有没有任何部分可以从并行运行中获益?对于如何实现这种编程风格,有什么指导方针吗 此外,是否有任何工具(最好是VS2010附带的工具)可以显示瓶颈出现的位置,并能够直观地显示当我在一个简单的应用程序上单击“Go

我被要求展示并行性的优点和局限性,并对其进行评估,以便在我们公司内使用。我们主要是面向数据的业务,本质上是从数据库加载对象,然后通过一些业务逻辑将它们显示给用户,然后保存回数据库。在我看来,这条管线中没有太多东西可以从并行运行中获益,但由于对这个概念还比较陌生,我可能完全错了。这条简单的管道有没有任何部分可以从并行运行中获益?对于如何实现这种编程风格,有什么指导方针吗

此外,是否有任何工具(最好是VS2010附带的工具)可以显示瓶颈出现的位置,并能够直观地显示当我在一个简单的应用程序上单击“Go”时发生的情况,该应用程序并行运行给定数量的循环(预写的简单数学循环,例如,对于I as integer=1到1000,进行一些计算),然后串联运行


我需要能够使用一个像样的分析工具来显示差异。

是的,即使是从简单的模型中,您也可以大大受益于并行性

例如,在加载数据的过程中,您正在执行以下操作:

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(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循环那样按顺序处理


我给你们的建议是,在像这个这样简单的例子上运行一些简单的性能测试,看看会得到什么样的结果。在电子表格或其他东西中绘制出来,并向您的团队展示。您可能会对得到的结果感到惊讶。

实现缓存层(分布式或其他)比并行化当前管道可能会带来更多好处

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

我建议你看一看,看看你是否认为它们很合适


编辑:就评测工具而言,我已经广泛使用了它,并强烈推荐它。您可以从JetBrains的网站下载30天试用版。

您查看过微软的网站吗?它包含了几篇关于实现指南的文章,讨论了何时以及如何使用.Net 4的并行功能。

当然有许多任务可以并行化,详细的分析会有所帮助,但可能存在瓶颈。

本资料可能会帮助您

,但我对此类查询的一般回答通常是-您的应用程序中是否存在任何性能问题?如果是,那么无论如何都要调查为什么并考虑并行执行是否有帮助。如果不是这样,那么时间最好花在别处。

谢谢@Joseph。我曾想知道Parallel.ForEach是否会改进一个简单的对象循环。我创建了一个应用程序,它根据我创建的一些循环绘制出时间结果,并根据要运行的内核运行这些循环,以及是否并行串联运行,并在.Net 4.0 VS2010图表上显示这些循环。然而,我的老板希望我使用现有的分析工具来显示幕后的情况。有没有一个工具可以有效地展示这一点?@Ben ANTS Profiler是检查性能的好工具,但它只是众多工具中的一个。事实上,关于性能工具,还有一些问题可能会有一个更完整的列表供您参考。