c# - 为什么 Paralle.for 松得这么厉害
问题描述
我正在尝试对 For 和 Parallel For 进行基准测试,以将列表复制到单个列表中
这里点是 int x 的结构, int y
以下是基准代码:
var points = addPoints();
int nbPoints = points.Count;
Measure("Normal Forloop", () =>
{
List<int> x = new List<int>(nbPoints);
List<int> y = new List<int>(nbPoints);
for (int i = 0; i < nbPoints; i++)
{
x.Add(points[i].X);
y.Add(points[i].Y);
}
});
Measure("Parallel Forloop", () =>
{
ConcurrentBag<int> x = new ConcurrentBag<int>();
ConcurrentBag<int> y = new ConcurrentBag<int>();
Parallel.For(0, nbPoints, i =>
{
x.Add(points[i].X);
y.Add(points[i].Y);
});
});
现在对于 NumberOfPoints = 1000000 的列表大小;
正常for循环的性能:24 ms
并行 For 循环的性能:367 毫秒
为什么parallel for 松得这么厉害,是不是因为concurrentbags?
解决方案
推荐阅读
- google-apps-script - 当用户选择范围内的单元格时,Google App Script 执行函数
- powershell - Select-Object 确实转换数据,但也将语句保留在它的数据中
- angular - agm-snazzy-info-window 显示在随机位置
- python - 来自 lxml 的意外 htmlelement 结果
- python - tkinter 绑定到“
"不工作 - node.js - 使用 Node FileSystem fs.writeFileSync() 将 JSON 数据写入文件
- azure - ADF 映射数据流 - 重用单个运行的 spark 集群以并行执行映射数据流
- html - 在模态对话框中实现下拉菜单:我无法设置动态显示的值
- javascript - 我从 RestAPI 得到一个 json 对象的列表,我想在节点红色仪表板中可视化该列表的第一个值
- ffmpeg - FFMPEG 在 concat 后降低帧速率,并增加视频持续时间