이 질문에 대한 대답은 아니지만 "C# 메모리 누수 문제"를 완화하는 데 도움이 될 수 있습니다.
C#에 RAII 패턴을 사용하면 관리되지 않는 리소스를 모두 처분 할 수 있으며 (개체가 범위를 벗어남에 따라) GC에서 관리되는 리소스를 줄일 수 있습니다.
내가 직장에서 사용하는 코드는 같은 것입니다 :
void ParseXmlString(string p_xmlString)
{
using (var stringReader = new StringReader(p_xmlString))
using (var xmlReader = XmlReader.Create(stringReader))
{
while (xmlReader.Read())
{
// etc.
}
}
}
당신이 THER 볼 수 있듯이, XmlReader를 (와 StringReader를) 변수가 각 분석의 시도에 대해 생성 로컬 하나입니다 (*) .
의미 (**), 따라서 가상 메모리 누수가 발생하지 않습니다.
XmlReader 클래스를 보면 NameTable을 재정의 할 방법이 없으므로 대체 구현을 제공 할 방법이 없습니다.
죄송합니다. ...
(*) 이 프로젝트에 적합하지 수 있지만 내에 맞는, 그래서
(**) 나는 ... 당신은 결코 GC로 알지 희망하지만, 당신은 할 수 여전히 시스템의 서브 클래스를 만들려면이 그렇게 할 수있는 유일한 방법이지만, (당신이 이미 할당량, MaxNameTableCharCount있는 경우) 무슨 일이 WCF에서 수행되는 경우 내가 모르는
메모리 누수가 C#입니까? – paercebal
더 심각하게 : 나는 NameTable을 없애고 가능한 한 빨리 XMLReader를 제거하는 것이 좋은 생각이라고 생각합니다.이렇게하면 GC가 "가상으로 누출 된 데이터"를 모두 수집합니다. – paercebal