Это не ответ на ваш вопрос, но он может помочь смягчить вашу "проблему утечки памяти в C #".
Используя шаблон RAII для C #, вы можете как распоряжаться неуправляемыми ресурсами, так и (когда объект выходит из области видимости) разрешить GC дозировать управляемые.
Код, который я использовал на работе, выглядит примерно так:
void ParseXmlString(string p_xmlString)
{
using (var stringReader = new StringReader(p_xmlString))
using (var xmlReader = XmlReader.Create(stringReader))
{
while (xmlReader.Read())
{
// etc.
}
}
}
Как вы можете видеть, переменная xmlReader ( и stringReader ) является локальной, создаваемой для каждой попытки анализа (*).
Это означает, что они будут собраны (**), и, таким образом, утечки виртуальной памяти предотвращены.
Глядя на класс XmlReader, я не вижу способа переопределить NameTable, поэтому я не вижу способа предложить альтернативную реализацию.
К сожалению.
(*) это не может соответствовать вашему проекту, но подходит моему, поэтому ...
(**) Надеюсь ... Вы никогда не знаете с GC, но тогда вы все равно можете попробовать System.GC.Collect()
для этого