我有一个IEnumerable列表,我必须对列表中的每个项目执行长时间运行操作。该列表中可能包含5000到5000万个项目。
我有列表中对象的总数,我使用foreach迭代列表。
我想通过数据每隔x%写入控制台,其中x通常使用更大的数据集,而较少使用较小的数据集。
将写入距离完全相同(即100个项目的10%20%和更大的集合的1.01%1.02%)将是一个额外的好处。
温柔,这是我的第一个问题! :)
答案 0 :(得分:1)
我有列表中对象的总数,我正在使用 foreach迭代列表。
然后你已经知道要处理的项目数量,所以一个明显的解决方案是:
int total = theList.Count;
int done = 0;
foreach (var item in theList)
{
Process(item);
done++;
// Outputs progress
double percentage = done / total * 100;
Console.WriteLine(percentage);
}
然后你可以使用模数来避免每次更新UI(或控制台或其他):
if (done % 1000 == 0)
{
// Outputs progress only 1 out of 1000 times
double percentage = done / total * 100;
Console.WriteLine(percentage);
}