XSLT缓存问题

时间:2017-03-21 07:20:24

标签: c# xml xslt saxon

我正在尝试在C#中实现XSL的缓存。我已经实现了以下代码

   Xsl2Processor xsl = new Xsl2Processor();
        if (HttpContext.Current.Cache.Get("xsl_" + xslPath) == null)
        {
            xsl.Load(xslPath);
            HttpContext.Current.Cache.Insert("xsl_" + xslPath, xsl, new System.Web.Caching.CacheDependency(xslPath));
        }
        else
        {
            xsl = (Xsl2Processor)HttpContext.Current.Cache.Get("xsl_" + xslPath);
        }
        return xsl;

单个用户ID可以正常使用。当我尝试两个用户ID同时(负载测试)。用户获取切换的数据。为什么会发生这种情况以及解决方案是什么?

1 个答案:

答案 0 :(得分:0)

在不知道你的Xsl2Processor课程是什么的情况下,很难回答这个问题。但在Saxon术语中,XsltExecutable是编译样式表的线程安全表示,您可以安全地缓存,而XsltTransformer(调用Load()的结果)是用于使用只有一次 - 您可以使用它一个接一个地运行多个转换(尽管这样做没有任何好处),但您不能使用它同时运行多个转换。您应该缓存的对象是XsltExecutable

您还没有证明您的缓存逻辑已正确同步以使其具有线程安全性。