我正在尝试在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同时(负载测试)。用户获取切换的数据。为什么会发生这种情况以及解决方案是什么?
答案 0 :(得分:0)
在不知道你的Xsl2Processor
课程是什么的情况下,很难回答这个问题。但在Saxon术语中,XsltExecutable
是编译样式表的线程安全表示,您可以安全地缓存,而XsltTransformer
(调用Load()
的结果)是用于使用只有一次 - 您可以使用它一个接一个地运行多个转换(尽管这样做没有任何好处),但您不能使用它同时运行多个转换。您应该缓存的对象是XsltExecutable
。
您还没有证明您的缓存逻辑已正确同步以使其具有线程安全性。