相关疑难解决方法(0)

ConcurrentBag中可能的内存泄漏?

我一直在阅读新的并发集合,特别是ConcurrentBag引起了我的注意.由于ConcurrentBag在每个单独的线程上内部拥有一个本地集来使用它来跟踪项目,这意味着当线程本身超出范围时,ConcurrentBag仍将在内存中引用它.这反过来意味着线程声称的内存,以及本机资源?(请原谅我不知道.NET线程对象的确切内部工作原理)

我可以假设一个用例,你有一个全局ConcurrentBack用于多线程webservice,你有很多客户端添加任务.这些任务由线程池上的线程添加.现在,线程池是一种非常有效的管理线程的方法,但它确实根据工作量删除并创建了线程.因此,这样的web服务有时会发现自己遇到麻烦,因为底层包仍在引用许多应该被破坏的线程.

我创建了一个快速应用程序来测试此行为:

    static ConcurrentBag<int> bag = new ConcurrentBag<int>();
    static void FillBag() { for (int i = 0; i < 100; i++) { bag.Add(i); } }
    static void PrintState() { Console.WriteLine("Bag size is: {0}", bag.Count); }
    static void Main(string[] args)
    {
        var remote = new Thread(x =>
        {
            FillBag();
            PrintState();
        });
        // empty bag
        PrintState();
        // first 100 items are added on main thread
        FillBag();
        PrintState();
        // second 100 items are added on remote thread
        remote.Start();
        remote.Join();
        // since the …
Run Code Online (Sandbox Code Playgroud)

.net concurrency

8
推荐指数
1
解决办法
4183
查看次数

标签 统计

.net ×1

concurrency ×1