このアプリケーションでは XslCompiledTransform.Transform 関数を使用しています。32 ビット モードで実行する場合の動作は正常ですが、64 ビット モードで実行すると、メモリ消費量が急激に増加します (最終的にメモリ不足の例外がスローされます)。同じコード、同じマシン - 一方は動作するが、もう一方は動作しない .... 誰かが同様の問題を見て、回避策を持っていますか?
ありがとう、
このアプリケーションでは XslCompiledTransform.Transform 関数を使用しています。32 ビット モードで実行する場合の動作は正常ですが、64 ビット モードで実行すると、メモリ消費量が急激に増加します (最終的にメモリ不足の例外がスローされます)。同じコード、同じマシン - 一方は動作するが、もう一方は動作しない .... 誰かが同様の問題を見て、回避策を持っていますか?
ありがとう、
それは実際にはスレッドに割り当てられているメモリが不足しているためですかOutOfMemoryException
? デフォルトではスレッドのスタックに 256kb しか割り当てられないためStackOverflowException
、IIS を実行している x64 Web サーバーでこの種の問題に遭遇したためです。この方法で、スタックのためのより多くのスペースを備えた Thread で、より大きな変換 ( DocBook から XSL-FO へのような) のいくつかを実行する必要がありました。
var stackedThread = new Thread(RunXsltWithMoreMemory, 2 * 1024 * 1024);
var threadParameters = ThreadXsltParameters {
InputStream = inputStream; // Source XML
OutputStream = outputStream; // Resultant XML
};
stackedThread.Start(threadParameters);
stackedThread.Join();
私は最近この問題に遭遇し、xsltc コマンドライン ユーティリティを使用して XSLT をコンパイルすることで解決しました。
xsltc someXsl.xsl /settings:DTD+,document+,script-
xsltc コマンド ライン ユーティリティは、MSDN の http://msdn.microsoft.com/en-us/library/bb399405.aspxに記載されています。
コマンドライン ユーティリティを実行すると、次のようにコードで使用するアセンブリが生成されます。
xmlTransform.Load(Assembly.Load(アセンブリ名).GetType(アセンブリ名));
また、変換のパフォーマンスが大幅に向上したようです。
既知のバグ - これを参照してください:
http://connect.microsoft.com/VisualStudio/feedback/details/508748