-1
카메라에서 비트 맵 이미지를 가져와 블록에서로드 및 수집을 차단하는 프로그램이 있습니다. UI 스레드에서 SetImage를 호출합니다. 몇 초 동안 작동 한 다음 메모리 부족 예외가 발생합니다. 당신이 관리되는 리소스를 포함로 코드에서 비트 맵 오브젝트를 처리 할 필요가BlockingCollection 메모리 부족 예외
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);
}
}
검색을 사용하여 비트 맵을 처리하십시오. – CodeCaster
비트 맵을 처리하는 것을 잊어 버리는 것 외에, 카메라가 처리 할 수있는 것보다 빠르게 비트 맵을 뱉어 내면 항상이 예외가 발생합니다. 가능성이 큰 사고입니다. BlockingCollection의 요점은 그것이 가득 차게되면 차단하도록하는 것입니다. * int *를 취하는 생성자를 사용하십시오. –
입력 해 주셔서 감사합니다. @HansPassant 이것은 내 카메라가 내가 처리 할 수있는 것보다 더 빨리 이미지를 제공한다는 것과 정확하게 일치합니다. 제한된 컬렉션을 사용하도록 제안 하시겠습니까? – Zshan