什么是计算上廉价的方式来通过列表每隔x%更新屏幕

时间:2014-05-27 12:09:11

标签: c# responsive-design progress-bar iteration

我有一个IEnumerable列表,我必须对列表中的每个项目执行长时间运行操作。该列表中可能包含5000到5000万个项目。

我有列表中对象的总数,我使用foreach迭代列表。

我想通过数据每隔x%写入控制台,其中x通常使用更大的数据集,而较少使用较小的数据集。

将写入距离完全相同(即100个项目的10%20%和更大的集合的1.01%1.02%)将是一个额外的好处。

温柔,这是我的第一个问题! :)

1 个答案:

答案 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);
}