BlockingCollection内存异常

时间:2015-01-07 19:25:13

标签: c# blockingcollection

我有一个程序,我从相机中获取位图图像加载它们 阻止线程中的收集和处理。我从UI线程调用SetImage。 它工作几秒钟然后我遇到内存不足异常。请指教

Class MyThread
{
   BlockingCollection<Bitmap> q = new BlockingCollection<Bitmap>();

   Thread thread;

   public MyThread()
   {

     thread = new Thread(ThreadFunc);
     thread.Start();
   }

   void ThreadFunc()
   {
     Bitmap local_bitmap = null;

     while (!exit_flag)
     {
        // This blocks until an item appears in the queue.
        local_bitmap = q.Take();

        // process local_bitmap
     }
   }

   public void SetImage(Bitmap bm)
   {
        q.Add(bm);
   }
}

1 个答案:

答案 0 :(得分:1)

你需要在代码中处理Bitmap对象,因为它包含托管资源,线程函数应该是:

void ThreadFunc()
   {


     while (!exit_flag)
     {
        // This blocks until an item appears in the queue.
        using (Bitmap local_bitmap = q.Take())
        {

        // process local_bitmap
        }
     }
   }

GC旨在自动管理内存,但与调度GC时一样,运行时会考虑分配的内存内存量,而不是非托管内存使用量。因此,在这种情况下,您需要通过自己处理对象或调用GC.AddMemoryPressure来加速GC。