2017-02-09 4 views
0

Ich versuche unseres Unternehmens Projekt und Load-Methode vonLoad-Methode von XslCompiledTransform Klasse wirft Stackoverflow Exception

XslCompiledTransform throws Exception Stackoverflow

und es mir zu bauen Fehler, weil buchstäblich vor fünf Minuten I war in der Lage zu bauen und gerade jetzt begann es throw exceptions ohne Änderungen der Vorlagen oder Code ...

if (context.Request.IsLocal) 
{ 
    var cc = new XslCompiledTransform(); 
    using (var xmlReader = new XmlTextReader(context.Server.MapPath("/templates/xhtmlmain.xsl")) 
     { DtdProcessing = DtdProcessing.Parse }) 
    { 
     cc.Load(xmlReader); 
    } 
    return cc; 
} 
+1

Prüfen Sie, ob https://blogs.msdn.microsoft.com/xmlteam/2011/09/26/effective-xml-part-5-something-went-really -wrong-outofmemoryexception-and-stack overflowexception-throwed-when-using-xslcompiledtransform/hilft bei der Lösung. –

+0

Danke Mann, das hat wirklich geholfen. In meinem Fall musste ich aufgrund unserer schlecht geschriebenen Vorlagen, die nicht refaktoriert werden können, einen Thread mit einer größeren als der Standard-Stackgröße erstellen. – kuskmen

Antwort

1

In meinem Fall musste ich aufgrund unserer schlecht geschriebenen Vorlagen, die nicht umstrukturiert werden können, einen Thread mit einer größeren als der Standard-Stackgröße erstellen.

Dies ist der Code:

private static XslCompiledTransform LoadTransformations(HttpContext context, XslCompiledTransform cc) 
    { 

     using (var xmlReader = new XmlTextReader(context.Server.MapPath("/templates/xhtmlmain.xsl")) 
     { 
      DtdProcessing = DtdProcessing.Parse 
     }) 
     { 
      cc.Load(xmlReader); 
     } 
     return cc; 
    } 

    private static XslCompiledTransform CreateTransformation(HttpContext context) 
    { 
     var cc = new XslCompiledTransform(); 

     // Since our templates are most likely poorly written it takes 
     // unusual amount of memory for a thread to handle the transformation 
     // leaving the application throwing StackOverflow Exception. 

     // This code creates different thread with 8MB stack size which actually succeeds in 
     // transforming all the templates. 

     // Creates custom thread and start it. 
     Thread t = new Thread(() => cc = GTHttpHandler.LoadTransformations(context, cc), 8 * 1024 * 1024); 
     t.Start(); 

     // Ensure our transformation thread is finished before doing anything. 
     t.Join(); 

     return cc; 
    } 
Verwandte Themen