지금은 하루 종일이 문제로 차단되었지만 수천 개의 Google 결과를 읽었지만 아무 것도 내 문제를 반영하지 않거나 가까이에 와서 보이지 않습니다. 당신은 나를 위해 바른 방향으로 밀어 넣습니다.StackOverFlowException -하지만 우연히 NO 재귀/무한 루프
클라이언트는 자신의 시스템에 대한 데이터와 스크린 샷을 수집하고 XML 스트림 (이 그림을 바이트 []으로 그림)으로 직렬화합니다. 배열]) 이것을 정기적 인 간격으로 서버에 보냅니다. 서버는 (tcp를 통해) 스트림을 수신하고 xml을 정보 객체로 직렬화 해제하고 정보를 Windows 양식에 표시합니다. 이 프로세스는 3 초의 제출 간격으로 약 20-25 분 동안 안정적으로 실행됩니다. 메모리 사용량을 관찰 할 때 아무런 의미가 없으며 다소 안정적입니다. 그러나이 20-25 분 후에 서버는 tcp-stream을 deserialize하는 지점에서 StackOverflowException을 던집니다. 특히 byte [] - 배열에서 Image 속성을 설정할 때 그렇습니다.
나는 반복적 또는 무한 루프를 철저히 수색했으며, 수천 개의 sucessfull 간격 후에 발생한다는 사실에 관해서는 거의 상상할 수 없었다.
public byte[] ImageBase
{
get
{
MemoryStream ms = new MemoryStream();
_screen.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
return ms.GetBuffer();
}
set
{
if (_screen != null) _screen.Dispose(); //preventing well-known image memory leak
MemoryStream ms = new MemoryStream(value);
try
{
_screen = Image.FromStream(ms); //<< EXCEPTION THROWING HERE
}
catch (StackOverflowException ex) //thx to new CLR management this wont work anymore -.-
{
Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
}
ms.Dispose();
ms = null;
}
}
내가 더 많은 코드가 불필요한 것, 또는 매우 복잡한 얻을 수 있기를 바랍니다 ...
도와주세요, 난 전혀 실마리 더 이상
들으이 없습니다 크리스
_screen = Image.FromStream (ms)에서 수행하는 작업에 궁금한 점이 있습니까? 아마 실수로 ImageBase를 설정하고 계신 것 같습니까? – Trap
나는 SO 질문을 좋아합니다. – Mehrdad
당신은 실제로 각 MemoryStream의 사용법을 using() - 블록에 넣어야합니다. 그러면 정확하게 처리되는 것을 쉽게 볼 수 있습니다! –