【发布时间】:2013-03-11 21:19:59
【问题描述】:
我的任务是更新一些遗留代码,并且确实需要减少部分代码的运行时间。下面的列表经常加载。我已经设法将时间从大约一分钟减少到大约十五秒,但它确实需要进一步减少。以下代码行运行良好,但我正试图从中挤出一切。
List<MyObject> _moList = new List<MyObject>(DB.GetAll(queryString, parameters, MyObject.Extract));
_moList.AsParallel().ForAll(s => s.RelativeCost = GetRelativeCost(s));
所以我有几个问题。首先,是否可以将这两行合并为一行,如果可以,如何?其次,这样做会提高性能吗?
有些不是 MyObject 有大约 40 个属性(不确定这是否相关),而 GetRelativeCost 在时间/cpu 周期方面有些昂贵(因此并行运行)。
任何帮助将不胜感激!
附:我也在研究其他角度,特别是试图降低 GetRelativeCost 的“成本”,但我需要让每个周期都能摆脱它,以使其为用户所接受。
【问题讨论】:
-
看起来您要访问数据库...您是否分析了查询以查看是否可以加快速度?
-
您是否希望在每次运行时提高平均性能(超过应用程序的反抗寿命)或最坏情况下的性能?如果是前者,您可以尝试每次缓存结果并测试以查看源数据是否在重新加载之前发生更改。
-
你为什么用
AsParallel而不是Parallel.ForEach? -
kzhen - 是的 Pieter - 是前者,我会看看有没有办法做到这一点 Zaid - 没有理由。是否有理由使用其中一个?
标签: c# performance lambda parallel-extensions