Visual Basic .NETアプリケーションからCOM相互運用機能を使用しているVB6で記述されたCOMコンポーネントがあります。なぜ私のCOMコンポーネントはOutOfMemoryExceptionをスローしますが、VB6では正常に動作しますか?
VB.NETから呼び出されたときにOutOfMemoryExceptionをスローするメソッドがあります。しかし、Visual Basic 6アプリケーションから全く同じ呼び出しを実行すると、すべて正常に動作します。
私はVB6からデバッグしようとするとエラーが発生しないため、これは長すぎるし、フォローするのが難しい(私はそれを修正することが任されている)表示されます。
この動作が異なる原因は何ですか?
辞書オブジェクト(Microsoft Scripting RuntimeのCOM)を使用してパフォーマンスの問題を修正するまで、これはうまくいきました。ディクショナリが非合理的に成長したり漏れない限り、例外がスローされる前にディメンションが100〜200の要素を超えることはなく、1つしか作成されないため、ディクショナリがこの原因となる可能性はありません。
私はCollectionオブジェクトと厄介なExists()関数で同じ修正を試みましたが、同じ問題が発生します。 Nothingを返すことで早期に救済できれば、それは動作します(つまり、NullReferenceExceptionがスローされます)。
意味のあるスタックトレースはありますか?メモリについてはどうですか?プロセスのサイズはどれくらいですか? –
@Simon:stacktraceはCOM/.NET境界で終了します。例外がスタックを横切って飛ぶと、プロセスは約100メガになります。 –
Scripting.Dictionary COMオブジェクトはSTA(Apartment)としてマークされています。以下にweloyttyが述べたように、スレッドをチェックしましたか?そして、あなたは複数のスレッドを使ってこの辞書にアクセスしていますか? –