Я использую следующий код для получения строки xml.«Исключение типа» System.OutOfMemoryException «было выбрано» при использовании xmlserializer
public static string ToXMLString(object obj, string nodeName)
{
XmlSerializer xmlSerializer = default(XmlSerializer);
string xml = string.Empty;
StreamReader r = default(StreamReader);
try
{
if (obj != null)
{
using (MemoryStream m = new MemoryStream())
{
using (XmlWriter writer = XmlWriter.Create(m, new XmlWriterSettings() { OmitXmlDeclaration = true, Indent = true }))
{
// Don't include XML namespace
XmlSerializerNamespaces xmlnsEmpty = new XmlSerializerNamespaces();
xmlnsEmpty.Add("", "");
if (xmlSerializer == null)
xmlSerializer = new XmlSerializer(obj.GetType(), new XmlRootAttribute(nodeName));
xmlSerializer.Serialize(writer, obj, xmlnsEmpty);
m.Flush();
m.Position = 0;
r = new StreamReader(m);
xml = r.ReadToEnd();
xmlSerializer = null;
}
}
}
return xml;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
finally
{
r.Close();
r.Dispose();
}
//XmlSerializer xmlSerializer;
}
У меня есть цикл, который выполняется с использованием метода и через некоторое время я получить из исключения памяти, как показано ниже:
Что может причину исключения? Является ли использование инструкции действительно распоряжаться потоками? Или какую другую альтернативу я могу использовать?
это не повлияет на код, но нет никакой пользы объявить эти переменные в верхней, ни назначение 'xmlSerializer' в' null' в конце; Я просто объявляю строку, т. Е. «Var xmlSerializer = новый XmlSerializer (...);». Вы не избавляете читателя, но это не будет убивать вас здесь. На самом деле, вы можете написать «StringBuilder», если хотите просто строку - избегать возиться с «потоком» ... –
Можем ли мы увидеть модель объекта, которую вы сериализуете? Я * подозреваю * это связано с моделью - что-то вроде циклической ссылки (то есть уклонение от встроенного обнаружения - не невозможно) или что-то подобное –
'using' вызывает' IDisposable.Dispose() 'при выходе из блока использования , Так что часть вашего кода в порядке. –