Erstellen von Einwegobjekten in statischen MethodenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Erstellen von Einwegobjekten in statischen Methoden

Post by Anonymous »

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();
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post