ConcurrentQueue的内存问题<>在.Net / C#

时间:2017-01-29 21:19:50

标签: c# .net memory concurrency queue

我在测试代码中注意到使用ConcurrentQueue<>在Dequeueing之后以某种方式不释放资源并最终耗尽内存。或者垃圾收集不经常发生。

以下是代码片段。我知道ConcurrentQueue<>存储引用,是的,我确实希望每次创建一个新对象,所以如果入队比出队更快,内存将继续上升。还有内存使用的截图。为了测试,我发送了5000个字节的数组,每个数组包含500000个元素。

有一个类似的问题:

ConcurrentQueue holds object's reference or value? "out of memory" exception

并且该帖子中提到的所有内容都是我所经历的......除了在出队后内存不会释放,即使队列被清空也是如此。

我很感激对此的任何想法/见解。

ConcurrentQueue<byte[]> TestQueue = new ConcurrentQueue<byte[]>();

Task EnqTask = Task.Factory.StartNew(() =>
{                
    for (int i = 0; i < ObjCount; i++)
    {
        byte[] InData = new byte[ObjSize];
        InData[0] = (byte)i; //used to show different array object
        TestQueue.Enqueue(InData);                                        
        System.Threading.Thread.Sleep(20);                    
    }
});

Task DeqTask = Task.Factory.StartNew(() =>
    {
        int Count = 0;
        while (Count < ObjCount)
        {
            byte[] OutData;
            if (TestQueue.TryDequeue(out OutData))
            {
                OutData[1] = 0xFF;  //just do something with the data
                Count++;                        
            }
            System.Threading.Thread.Sleep(40);
        }

Picture of memory

0 个答案:

没有答案