小编gco*_*oll的帖子

迭代时C#ConcurrentBag内存消耗

如果我从发布代码开始,这会更容易:

static void Main(string[] args)
{
    List<double> testLst = new List<double>();
    for (int i = 0; i < 20000000; i++) { testLst.Add(i); }
Run Code Online (Sandbox Code Playgroud)

我已经填充了一个包含20,000,000个元素的List.我在任务管理器中看到该进程正在使用~300MB.如果我使用foreach循环遍历列表:

    foreach (var a in testLst.Take(10)) 
    {
        Console.WriteLine(a);
    }
}
Run Code Online (Sandbox Code Playgroud)

内存使用率没有增加(我在Console.WriteLine上设置了一个断点,正如我所说,我正在使用任务管理器测量它).现在,如果我用ConcurrentBag替换List:

static void Main(string[] args)
{
    ConcurrentBag<double> testCB = new ConcurrentBag<double>();
    for (int i = 0; i < 20000000; i++) { testCB.Add(i); }

    foreach (var a in testCB.Take(10)) 
    {
        Console.WriteLine(a);
    }
}
Run Code Online (Sandbox Code Playgroud)

在foreach循环之前,内存使用量为450~500MB.问题是:为什么如果在foreach循环使用内部跳到~900MB?

我希望ConcurrentBag与List相比消耗更多内存,但我不明白为什么这么多内存被用于迭代.

(我在类似但不同的情况下使用ConcurrentBag,我知道在这种情况下使用它是没有意义的)

c# memory foreach list

4
推荐指数
1
解决办法
666
查看次数

标签 统计

c# ×1

foreach ×1

list ×1

memory ×1