2010-05-10 2 views
7

에 나는 내 코드에서 다음 지점에 도달 할 때마다에 OutOfMemoryExceptions을 던지고 웹 사이트를 , 나는 이것이 왜 일어나고 있는지에 대한 많은 정보를 가지고 있지 않다. 직렬화되는 객체가 너무 심각하지 않다는 것을 알고 있습니다. 확실히 각각 MB 미만입니다..NET에서 OutOfMemoryException는 XMLSerializer.Serialize

전에 사용 해보았습니까? 문제 진단을 돕는 것처럼 느껴지나요? 어떤 도움을 주셔서 감사합니다.

감사합니다.

답변

9

OutOfMemoryException은 직렬화되는 개체가 원인이 아니며 대신 XmlSerializer 개체가 생성 된 결과입니다. XmlSerializer가 만들어지면 어셈블리가 동적으로 생성되어 AppDomain으로로드됩니다. 이러한 어셈블리는 자신의 AppDomain이 언로드 될 때까지 가비지 수집 될 수 없습니다. 사용되는 XmlSerializer 생성자에 따라 생성 된 모든 XmlSerializer가 새 어셈블리를 동적으로 생성합니다. 시간이 지남에 따라 이러한 어셈블리는 사용 가능한 모든 메모리를 사용합니다.

  1. 캐시가 만든 XmlSerializer가 :

    솔루션의 몇 가지가 있습니다.

  2. 캐싱을 구현하는 XmlSerializer 생성자 오버로드 중 하나를 사용하십시오. 캐싱을 구현하지 않는 XmlSerializer (Type, XmlAttributeOverrides)를 사용하고있는 것처럼 보입니다. XmlSerializer (Type) 및 XmlSerializer (Type, string)는 캐싱을 구현합니다. 내가 사용하고있는 동안

Microsoft KB : Memory usage is high when you create several XmlSerializer objects in ASP.NET

+0

안녕하세요, 비슷한 문제에 직면하고있다 "새 XmlSerializer를 (o.GetType());". 로컬 컴퓨터에서이 문제에 직면하고 있습니다. 클라우드 서버에서 호스팅되는 라이브 앱에 대해서는 예외가 아닙니다. 매우 큰 데이터가 직렬화됩니다. 하지만 개발 중에 직렬화 된 문자열을 사용하고 테스트 할 수는 없습니다. 나는 제안에 개방적이다. –

0

이전에 비슷한 문제가 있었지만 XmlSerializer는 처리하는 데이터보다 더 많은 메모리가 필요합니다. 왜 이런 경우인지 나는 모르겠다.