Nit*_*jay 2 c# parallel-processing winforms
我正在使用并行循环来提高加载我的图表的性能,我在并行循环中调用了它.
Load Chart方法有很大的代码,我希望并行执行,但是当我执行时它没有显示并行执行和顺序执行的差异.
并行和顺序过程都需要相同的执行时间.
我的并行循环代码如下.
List<Chart> lstCharts = new List<Chart>();
Parallel.For(0, givenSampleArray.Length, i =>
{
Chart NewChart = new Chart();
objChart.LoadChart(ref NewChart, givenSampleArray[i], YAxisTable, XPointsValues,
ScaleMinValue, ScaleMaxValue, ref dtNewRowsContainer,
dtExcelData);
NewChart.Tag = (i + 1).ToString();
NewChart.Width = (pnlChart.Width * 49) / (100);
Legend legend = AddLegend();
NewChart.Legends.Add(legend);
lstCharts.Add(NewChart);
}
);
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 16
我注意到你的问题没有问题,所以我会问你一些问题:
为什么我的程序在并行化时不会变得更快?
九个女人在一个月内不能聚在一起生孩子.并行化时,某些操作不会加速.这是其中之一.
通过并行化可以有效解决问题的特征是什么?
并行化时运行速度更快的操作具有以下特性:(1)可以根据需要将问题轻松划分为多个部分,(2)可以相互独立地正确解决较小的问题,以及(3)解决方案可以将较小的问题廉价地组合成更大问题的解决方案.
例如,比较计算物理模拟和计算分形图像.许多相互作用体的模拟很难分解为子问题,因为所有部分都相互作用.但分形的前千个像素不与第二千个像素相互作用.分形计算很容易并行化; 物理模拟很难并行化.(虽然当然可以做到;但这并不容易.)
假设我确实有一个"令人尴尬的并行"问题需要解决.制作十个线程会使它快十倍吗?
首先,如果您希望在并行化时更快地完成工作,则需要使处理器饱和.如果你只有四个处理器,那么十个线程会使你的程序变慢,而不是更快.其次,创建和管理线程有成本,而这些成本来自底线.
将线程视为汽车的驱动程序和处理器.如果你要提供一千个包裹,一辆车和一个司机,可能需要100个小时.如果你雇用另一个司机,你已经把钱花在司机身上,但没有额外的车,它就不会更快; 它会变慢.如果您购买四辆汽车,您需要四名司机每人提供250个包裹.需要25个小时吗?嗯,雇用这些司机需要多长时间?线程分配不便宜; 这需要时间,你必须考虑到这一点.
而你当然不希望四个车共享十个司机,每个司机负责100个包!这只会让它变得更慢,更昂贵,因为你支付所有十个司机的费用,即使在任何时候他们至少有六个人闲置等待汽车可用.
总结:不要尝试并行化,除非你有一个容易并行化的问题使处理器饱和,其中作业比创建一个线程要昂贵得多,并确保没有比处理器更多的线程.理想情况下,您希望使用任务而不是线程; 任务并行库旨在为您确定要计划多少线程的工作.
归档时间: |
|
查看次数: |
343 次 |
最近记录: |