-1

XSDを別のタイプのXSDに解析するために、それ自体を再帰的にインスタンス化するクラスをプログラミングしていました。インターネットからダウンロードして各要素をウォークスルーし、要素の1つにcomplexType別の要素にあるaがあるURI場合は、それ自体のインスタンスの1つを作成することで同じことを実行します。

しかし、XSDが非常に大きく、多くの外部リンクがある場合、今日、Stackoverflow例外のためにクラスがクラッシュしました。

インスタンスメソッドの一部をHelper.cs静的メンバーとして別のクラス()に配置し、パーサークラス内から呼び出すことにしました。

しかし、これが良い解決策であり、Stackoverflow例外を解決できるかどうか疑問に思いますか?インスタンスメソッドがスタックフレームにどのように配置されるかは知っていますが、静的メソッドは同じように扱われますか?Stackoverflow例外は発生しますか?

4

2 に答える 2

8

インスタンスメソッドと静的メソッドの唯一の違いは、インスタンスメソッドが追加の非表示thisパラメータを受け取ることです。(実際には、インスタンスメソッドも可能virtualですが、ここでは違いはありません)

どちらもスタックオーバーフローに対して同等に脆弱です。

大きな入力のスタックオーバーフローを回避したい場合は、再帰を使用しないでください。

于 2012-11-28T17:54:57.367 に答える
1

静的vsインスタンスは問題とは関係ありません。スタックの深さは、スタックまたはヒープにある関数を含む実際のメモリではなく、呼び出しに基づいて増減します。

確実な終了条件のない再帰、無限大にカウントされるループ、または単純に大きすぎるデータソースを探します。プロジェクトはWebサーバーで実行されていますか?IISには、デスクトップアプリよりも制限の厳しいスタックサイズ(w3wp.exeにコンパイルされたもの)の制限が組み込まれています。

于 2012-11-28T18:00:02.007 に答える