foreach (var data in reportdata)
{
lstReportDataPrint.AddRange(data.ToList());
}
这个循环花了很多时间,我想减少它。 我还有其他办法吗?
答案 0 :(得分:2)
我不确定这是否会优化此解决方案,但您可以将其缩小为一行:
lstReportDataPrint.AddRange(reportdata.SelectMany(d => d));
请注意,由于AddRange()
需要IEnumerable<T>
,因此您的代码中ToList()
的调用是不必要的:它会创建List<T>
的新副本,该副本会在AddRange()
之后立即被删除致电{{1}}。避免这个电话会节省你一些时间。但是,循环表现不佳的最可能原因可能在于获取正在迭代的数据的代码。
答案 1 :(得分:1)
请记住,LINQ很棒,看起来很花哨,但由于它与枚举器一起使用,因此速度不是很快。 使用for循环并添加每个值实际上比调用AddRange并使用LINQ更快,尽管AddRange已针对添加大量值进行了优化。
for (int dataID = 0; dataID < reportdata.Count; dataID++)
{
for (int recordID = 0; recordID < 500; recordID++)
{
lstReportDataPrint.Add(reportdata[dataID][recordID]);
}
}
在我运行的一些测试中,与LINQ相比,这几乎将执行时间减半。 因此,令人遗憾的是,eyecandy和performance是两个完全不同的概念。
享受。
答案 2 :(得分:-1)
我喜欢Parallel.Foreach方法,但是你需要.Net 4.5或更高版本,并且不能保证它能帮助它更快地运行。试一试
Parallel.ForEach(reportdata, (data) =>
{
lstReportData.AddRange(data.ToList());
});