내가 어떤 스트림에 쓸 때 나는 비트 맵MemoryStream에 .Save() 비트 맵을 .Dispose()하지 않으면 메모리 누수가 발생하는 이유는 무엇입니까? (HttpListenerResponse에 의해 주어진 내 경우에는, 그것은 HttpResponseStream이야)
Bitmap bitmap = new Bitmap(320, 200);
을 만들 말, 다 괜찮 :
bitmap.Save(stream, ImageFormat.Png);
I 돈 bitmap.Dispose()가 필요합니다. 비트 맵에서 사용하는 리소스가 자동으로 정리됩니다. 그러나 PNG를 직접 검색 할 수없는 스트림에 쓰는 문제는 A generic error occurred in GDI+이 될 수 있다는 것입니다. Azure에서 내 Asp 앱을 사용해 보았을 때 그 일이 일어났습니다. 그래서 내 코드는 다음과 같습니다.
using (MemoryStream ms = new MemoryStream())
{
bitmap.Save(ms, ImageFormat.Png);
ms.WriteTo(stream);
}
이제 bitmap.Dispose()를 실행하지 않으면 누출됩니다.
고쳐 질문보다 구체적인 답변을 얻을 수 있습니다 : 왜 비트 맵이 메모리 누수가 나는에 저장 스트림의 유형에 따라이 나타 납니까?
업데이트 : 나는 그것이 누출 확신 있다면 댓글에 물어 봤는데으로 . 위의 내용을 스트레스 테스트에서 반복적으로 호출하면 내 컴퓨터가 스왑을 시작할 때까지 내 w3wp 프로세스가 사용 된 메모리와 기가비트까지 올라가며 정리되지 않습니다.
메모리 누수가 확실하고 가비지 수집이 아직 정리되지 않았습니까? – Matthew
메모리 누수가 발생 했습니까? 그들은 .Net의 발명으로 메모리 누출의 정의를 재정의했습니다.) – James
@James; GDI +를 사용하면 AppDomain이 해제 된 후에 정리되는 시스템 메모리 누수가 발생할 수 있습니다. – AMissico