У меня есть веб-сайт, который бросает OutOfMemoryExceptions на то, каждый раз, когда это добирается до следующего пятна в моем коде:
XmlSerializer xs = new XmlSerializer(t, xoverrides);
Наблюдение, как это только происходит, когда это находится на веб-сервере, у меня нет тонны информации о том, почему это происходит. Я знаю, что объекты, которые это сериализирует, являются ничем слишком серьезным - определенно меньше чем МБ каждый.
У Вас было это прежде? Испытывать желание помогать мне диагностировать проблему? Любая справка ценится.
Спасибо!
OutOfMemoryException - не вызвано сериализацией объектов, а является результатом построения объектов XmlSerializer. Когда создается XmlSerializer, сборка динамически создается и загружается в AppDomain. Эти сборки не могут быть обработаны сборщиком мусора до тех пор, пока их AppDomain не будет выгружен, что в вашем случае никогда не происходит. В зависимости от используемого конструктора XmlSerializer каждый созданный XmlSerializer будет динамически генерировать новую сборку. Со временем эти сборки будут использовать всю доступную память.
Есть несколько решений:
Microsoft KB: использование памяти велико при создании нескольких объектов XmlSerializer в ASP.NET
Если я помню из похожих проблем некоторое время назад, XmlSerializer требует тонну памяти больше, чем данные, которые он обрабатывает. Однако я не уверен, почему так происходит.