【发布时间】:2012-11-06 17:19:21
【问题描述】:
我有一组数据都是双打的: 100行20列
我将数据拉到一个 IEnumerable 列表中:
var RowsOfData = File.ReadLines(dll.Globals.OutputDir + dll.Globals.filename).Select(a => a.Split(',').ToList());
var FilteredRowsToday = (from n in RowsOfData
where n[1] == 1
orderby n[0] descending
select n);
然后我有一组函数,它们对每个数据行进行简单检查,每个都返回一个 Bool。 我想要的是计算每个函数评估为真的行数。 然后,当我扩大项目规模时,如果可能的话,我希望尽快并行处理,我已经尝试过:
foreach (var row in FilteredRowsToday) {
is f1() true, is f2() true
etc
}
看起来很慢 我尝试过并行处理
foreach (var row in FilteredRowsToday.AsParallel())
没有更快
我现在在想这样的事情:
var TotalTrue = FilteredRowsToday.Select(item => f1() & f2() & f3()).Count();
如果这是一个更好的陈述点,我可以预处理数据以将每个函数的评估结果提供为一种二进制网格?
F1, f2, f3 etc
1, 0, 0 row 1
1, 1, 1 row 2 etc
欢迎提出建议!
【问题讨论】:
-
100 行是一个非常小的计数。为什么你的计算这么慢?有些方法需要很长时间吗?