XSLT での StackOverflowExceptions の防止と管理
XSLT 変換は、特に設計が不十分な再帰 XSL スクリプトを扱う場合、StackOverflowExceptions
に対して脆弱になる可能性があります。 これらの例外は、再帰呼び出しによって利用可能なスタック メモリが使い果たされ、プログラムの終了につながる場合に発生します。
積極的な対策:
StackOverflowExceptions
を防ぐことが最も重要です。 これらの戦略は、問題を完全に回避するのに役立ちます:
事後対応戦略:
.NET バージョン 2.0 以降では、StackOverflowExceptions
ブロックを使用して try-catch
を直接処理することはできませんが、これらの手法により効果的な軽減策が提供されます。
StackOverflowException
が発生した場合、この分離プロセスはメイン アプリケーションに影響を与えることなく正常に終了できます。実装例 (個別プロセスアプローチ):
これは、別のプロセスで XSLT 変換を起動し、StackOverflowException
:
メインアプリケーション:
<code class="language-csharp">Process p1 = new Process(); p1.StartInfo.FileName = "ApplyTransform.exe"; p1.StartInfo.UseShellExecute = false; p1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; p1.Start(); p1.WaitForExit(); if (p1.ExitCode == 1) { Console.WriteLine("StackOverflowException occurred in the transformation process."); }</code>
ApplyTransform.exe
(別のプロセス):
<code class="language-csharp">class Program { static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; // ... XSLT transformation code here ... (This code would likely throw the exception) throw new StackOverflowException(); // Simulates the exception } static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { if (e.IsTerminating) { Environment.Exit(1); // Signals an error to the main application } } }</code>
このアプローチにより、XSLT 変換内の StackOverflowException
がメイン アプリケーションをクラッシュさせません。別のプロセスの ExitCode
は、エラー状態を示します。
以上がXSLT 変換における StackOverflowExceptions を回避および管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。