Короче говоря, у меня есть приложение, которое преобразует плоский файл данных в файл XML.Это делается путем заполнения объектов и последующего их сериализации в XML.
Проблема, с которой я сталкиваюсь, заключается в том, что сборщик мусора, похоже, не заботится о сериализованных строках.3500 файлов записей выполняются до OutOfMemoryException до того, как они завершатся.Действительно, что-то подозрительно.
Когда я вынимаю сериализацию из микса и просто пропускаю пустую строку, потребление памяти остается ожидаемым, поэтому я исключил возможность того, что мои промежуточные объекты (междуФайл и XML) являются проблемой здесь.Кажется, они собраны, как и ожидалось.
Кто-нибудь может помочь?Как мне убедиться, что эти строки утилизированы правильно?
Обновление: Пример кода
// myObj.Serialize invokes an XmlSerializer instance to handle its work
string serialized = myObj.Serialize();
myXmlWriter.WriteRaw(serialized);
В этом и заключается проблема, которая возникает в основном - если я выну строку serialized
из игры, проблемы с памятью тоже исчезнут,хотя я все еще превращаю плоский файл в объекты, по одному за раз.
Обновление 2: метод сериализации
public virtual string Serialize()
{
System.IO.StreamReader streamReader = null;
System.IO.MemoryStream memoryStream = null;
using (memoryStream = new MemoryStream())
{
memoryStream = new System.IO.MemoryStream();
Serializer.Serialize(memoryStream, this);
memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
using (streamReader = new System.IO.StreamReader(memoryStream))
{
return streamReader.ReadToEnd();
}
}
}