Erstellen von Einwegobjekten in statischen Methoden
Posted: 12 Feb 2025, 11:43
Ich untersuche derzeit ein potenzielles Speicherleck in einem Windows -Dienst und stieß auf die folgende statische Klasse mit statischen Methoden, die wir aufrufen, um XML zu transformieren/zu generieren. Könnte dies ein Speicherleck verursachen, obwohl wir "Anweisungen verwenden"? Und wäre es besser Übung, stattdessen eine nicht statische Klasse für diese Funktionalität zu verwenden? < /P>
Code: Select all
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Xsl;
public static class XSLTTransformHelpers
{
///
/// Transforms an xml formatted string using an xslt transform
///
/// The input data to be transformed
/// The transfer to be used
/// The transformed xml formatted string
public static string Transform(string inputDataXML, string inputTransformXML)
{
using (var xsltInputReader = new StringReader(inputTransformXML))
using (var xsltXmlReader = XmlReader.Create(xsltInputReader))
{
var xslt = new XslCompiledTransform();
xslt.Load(xsltXmlReader);
using (var results = new StringWriter())
using (var inputReader = XmlReader.Create(new StringReader(inputDataXML)))
{
xslt.Transform(inputReader, null, results);
return results.ToString();
}
}
}
///
/// Serializes an object into an xml string
///
/// The object type to be serialized into xml
/// The object to be serialized
/// The object serialized as an xml string
public static string GetXml(T objectToSerialize)
{
XmlAttributes attrs = new XmlAttributes();
XmlAttributeOverrides xOver = new XmlAttributeOverrides();
XmlRootAttribute xRoot = new XmlRootAttribute();
// Set a new Namespace and ElementName for the root element.
xRoot.ElementName = objectToSerialize.GetType().Name;
attrs.XmlRoot = xRoot;
/* Add the XmlAttributes object to the XmlAttributeOverrides.
No member name is needed because the whole class is
overridden. */
xOver.Add(typeof(T), attrs);
var xmlSubmit = new XmlSerializer(typeof(T), xOver);
using (var stringWriter = new StringWriter())
using (var xmlWriter = XmlWriter.Create(stringWriter))
{
try
{
xmlSubmit.Serialize(stringWriter, objectToSerialize);
}
catch (Exception ex)
{
throw ex;
}
return stringWriter.ToString();
}
}
}