ASP.NET에서 몇 가지 XmlSerializer 개체를 만들 때 메모리 사용량이 높습니다.


증상


Microsoft ASP.NET에서 XmlSerializer 개체를 여러 개 만들면 메모리 사용량이 갑자기 증가 됩니다.

원인


이 문제는 Microsoft 중간 언어 (MSIL)를 포함 하는 어셈블리를 만들고 XmlSerializer 개체를 만들 때 메모리에 로드 하기 때문에 발생 합니다. 에 있는 응용 프로그램 도메인을 언로드하지 않고 어셈블리를 언로드할 수 없습니다. 따라서 몇 가지 XmlSerializer 개체를 만들 때 메모리 사용이 많으면 예기치 않게 발생할 수 있습니다.

예를 들어, 몇 가지 XmlSerializer 개체를 만드는 생성자를 사용 하는 경우 새 동적 어셈블리를 때마다 만들어집니다.
public void XmlSerializer( Type t, Type[] extraTypes)

해결 방법


동적 어셈블리를 다시 만들어이 문제를 해결 하려면 다음 방법 중 하나를 사용 합니다.
  • XmlSerializer 클래스의 인스턴스를 만들고 캐시에 캐싱 Api를 사용 하 여 해당 인스턴스를 배치 합니다. 예를 들어, 다음 코드 부분의 명명 된.dll 파일에 대 한 XmlSerializer 클래스의 인스턴스를 캐시:
    XmlSerializer mySerializer = new XmlSerializer(typeof(HighSchool.MyClass), attrOverrides, extraTypes, root, "http://www.microsoft.com");
    Cache["HighSchoolSerializer"] = mySerializer
    매번 새 XmlSerializer 개체를 만드는 대신 캐시에 배치 하는 XmlSerializer 클래스의 인스턴스를 사용 합니다.
  • 다음 XmlSerializer 클래스 생성자를 사용 합니다. 이러한 클래스 생성자에서 어셈블리를 캐시:
    .NET Framework 버전 1.0에서
     public XmlSerializer(Type);

    .NET Framework 버전 1.1에서
    public XmlSerializer(Type type);
    public XmlSerializer(Type type, string defaultNamespace); 
  • XmlSerializer 개체를 클래스의 정적 멤버를 선언 합니다.

참조


XmlSerializer 클래스 생성자와 XmlSerializer 클래스에 대 한 자세한 내용은 다음 Microsoft Developer Network (MSDN) 웹 사이트를 방문 하십시오.