.NET OutOfMemoryException на XMLSerializer. Сериализировать

У меня есть веб-сайт, который бросает OutOfMemoryExceptions на то, каждый раз, когда это добирается до следующего пятна в моем коде:

XmlSerializer xs = new XmlSerializer(t, xoverrides);

Наблюдение, как это только происходит, когда это находится на веб-сервере, у меня нет тонны информации о том, почему это происходит. Я знаю, что объекты, которые это сериализирует, являются ничем слишком серьезным - определенно меньше чем МБ каждый.

У Вас было это прежде? Испытывать желание помогать мне диагностировать проблему? Любая справка ценится.

Спасибо!

7
задан Micah 10 May 2010 в 19:19
поделиться

2 ответа

OutOfMemoryException - не вызвано сериализацией объектов, а является результатом построения объектов XmlSerializer. Когда создается XmlSerializer, сборка динамически создается и загружается в AppDomain. Эти сборки не могут быть обработаны сборщиком мусора до тех пор, пока их AppDomain не будет выгружен, что в вашем случае никогда не происходит. В зависимости от используемого конструктора XmlSerializer каждый созданный XmlSerializer будет динамически генерировать новую сборку. Со временем эти сборки будут использовать всю доступную память.

Есть несколько решений:

  1. Кэшируйте созданный вами XmlSerializer.
  2. Используйте одну из перегрузок конструктора XmlSerializer, которая реализует кэширование. Похоже, вы используете XmlSerializer (Type, XmlAttributeOverrides), который не реализует кеширование. XmlSerializer (Type) и XmlSerializer (Type, string) реализуют кеширование.

Microsoft KB: использование памяти велико при создании нескольких объектов XmlSerializer в ASP.NET

11
ответ дан 6 December 2019 в 23:02
поделиться

Если я помню из похожих проблем некоторое время назад, XmlSerializer требует тонну памяти больше, чем данные, которые он обрабатывает. Однако я не уверен, почему так происходит.

0
ответ дан 6 December 2019 в 23:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: