Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net XslCompiledTransform.Transform 64位内存问题_.net_Xml_Xslt_32bit 64bit_Xslcompiledtransform - Fatal编程技术网

.net XslCompiledTransform.Transform 64位内存问题

.net XslCompiledTransform.Transform 64位内存问题,.net,xml,xslt,32bit-64bit,xslcompiledtransform,.net,Xml,Xslt,32bit 64bit,Xslcompiledtransform,我们的应用程序使用XslCompiledTransform.Transform函数。如果我们在32位模式下运行它,这种行为是正常的,但是当在64位模式下运行时,内存消耗会跳得太高(最终抛出内存异常)。相同的代码,相同的机器-一个工作,而另一个不工作…有人看到类似的问题,并有解决办法吗 谢谢,已知的bug-请参阅以下内容: 由于分配给线程的内存不足,它实际上是OutOfMemoryException还是StackOverflowException?我之所以问这个问题,是因为我在运行IIS的x64

我们的应用程序使用XslCompiledTransform.Transform函数。如果我们在32位模式下运行它,这种行为是正常的,但是当在64位模式下运行时,内存消耗会跳得太高(最终抛出内存异常)。相同的代码,相同的机器-一个工作,而另一个不工作…有人看到类似的问题,并有解决办法吗

谢谢,

已知的bug-请参阅以下内容:


由于分配给线程的内存不足,它实际上是
OutOfMemoryException
还是
StackOverflowException
?我之所以问这个问题,是因为我在运行IIS的x64 web服务器上遇到了这种类型的问题。我必须以这种方式在一个线程中进行一些较大的转换(),为堆栈留出更多空间:

var stackedThread=新线程(runxsltwithmoremory,2*1024*1024);
var threadParameters=ThreadXsltParameters{
InputStream=InputStream;//源XML
OutputStream=OutputStream;//结果XML
};
stackedThread.Start(线程参数);
stackedThread.Join();

我最近遇到了这个问题,并通过使用xsltc命令行实用程序编译XSLT解决了这个问题

xsltc someXsl.xsl /settings:DTD+,document+,script- xsltc someXsl.xsl/settings:DTD+,document+,script- xsltc命令行实用程序记录在MSDN上

然后,一旦您运行了命令行实用程序,就会生成一个程序集,您可以在代码中使用它,如下所示:

xmlTransform.Load(Assembly.Load(assemblyName).GetType(assemblyName)); 装入(Assembly.Load(assemblyName).GetType(assemblyName));
它似乎还显著提高了转换的性能。

虽然XslCompiledTransform在这一点上是一种古老的技术,可能没有太多使用,但我最近在.NET 4.5中做了一些测试,似乎这个内存消耗错误已经修复

我还没有从Microsoft找到任何明确的指示(我似乎再也无法访问旧的Connect bug),但使用相当复杂的XSLT(数千行)和大量xpath表达式进行测试时,在.NET 4.5的64位进程中没有显示任何异常内存使用情况。在.NET3.564位中执行相同的XSLT,在8GB的机器上立即跳到6.5GB,并从那里继续上升

我很好奇,是否还有其他人可以通过64位.NET 4.5中的XslCompiledTransform重现这种糟糕的内存使用行为,或者是否知道与此问题相关的Microsoft更新