我们的应用程序使用XslCompiledTransform.Transform函数。如果我们以32位模式运行它,行为是正常的,但是当在64位模式下运行时,内存消耗只会跳得太高(最终会抛出内存异常)。相同的代码,相同的机器 - 一个工作,而另一个不工作....有没有人看到类似的问题,并有一个解决方法?
谢谢,
答案 0 :(得分:1)
我最近遇到了这个问题并通过使用xsltc命令行实用程序编译我的XSLT来解决它。
xsltc someXsl.xsl /settings:DTD+,document+,script-
xdsltc命令行实用程序在MSDN上记录:http://msdn.microsoft.com/en-us/library/bb399405.aspx。
然后,一旦运行了命令行实用程序,就会生成一个程序集,您可以在代码中使用它,如下所示:
xmlTransform.Load(Assembly.Load(assemblyName).GetType(assemblyName));
它似乎也显着提高了转换的性能。
答案 1 :(得分:0)
答案 2 :(得分:0)
虽然XslCompiledTransform在这一点上是古老的技术并且可能用得不多,但我已经在.NET 4.5中进行了一些最近的测试,看起来这个内存消耗错误已得到修复。
我还没有找到微软的任何明确指示(我似乎无法再访问旧的Connect错误),但是使用相当复杂的XSLT(几千行)进行测试在.NET 4.5中,xpath表达式不显示64位进程中的任何异常内存使用情况。在.NET 3.5 64位中执行相同的XSLT会立即在8 GB计算机上跳转到6.5 GB并继续从那里上升。
我很好奇其他人是否仍然可以使用64位.NET 4.5中的XslCompiledTransform重现坏内存使用行为,或者知道Microsoft的任何更新都与此问题有关。