簡體   English   中英

XslCompiledTransform類的加載方法引發StackOverflow異常

[英]Load method of XslCompiledTransform class throws StackOverflow Exception

我正在嘗試構建我們公司的項目和Load方法

XslCompiledTransform引發StackOverflow異常

它困擾着我,因為實際上是在五分鍾前,我能夠構建並且現在無需更改模板或代碼就開始throw exceptions

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

事實證明,由於我們的模板編寫得不好,無法重構,因此我不得不使線程的大小大於默認堆棧大小。

這是代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM