3

私は C# アプリケーションで Interop.Domino dll バージョン 1.2 を使用しており、マルチスレッドを使用して、作成されたスレッドごとに新しいセッションを作成することにより、同時に複数の NSF ファイルにアクセスしています (一度に最大 5 つのスレッド)。

大きな NSF ファイルの場合、メモリ セグメント オーバーフローのような Notes エラーが発生していました。この問題を克服するために、Marshal.ReleaseComObject(object) を使用して、必要な Notesdocument と NotesView オブジェクトを可能な限り解放しました。

現在、問題は、2 つの NSF ファイルにアクセスできますが、ほとんどの Notes オブジェクトが null になっていないため、残りのスレッドは dll 例外になります。

親切に助けてください....

手伝ってくれてありがとう。

4

1 に答える 1

2

私は最近、このまったく同じ質問についていくつかの実験を行ってきました。

2 種類のスレッドを起動するテスト プログラムを作成しました。各スレッドは、8 ~ 10 人のユーザーで動作するように構成されています。すべてのスレッドは、ユーザーのメール ファイルを見つけるために Domino ディレクトリを読み取る必要があります。また、各スレッドは結果ドキュメントを 1 つの共通 NSF ファイルに書き込みます。しかし、メール ファイルの主な作業では、2 つのスレッドが同じ NSF にアクセスすることはありません。NSF ファイルは 2 つのサーバーに分散されています。スレッドのうち 5 つは NotesDatabase.Search を使用しており、スレッドのうち 5 つは NotesView を読み取って NotesViewEntry オブジェクトにドリルダウンしています。あなたが遭遇したのと同じメモリの問題に遭遇し、同じ方法で解決しましたが、Domino ディレクトリまたは出力 NSF のデータベース オブジェクトを解放しないように細心の注意を払いました。このテスト コードを最大 10 個のアクティブ スレッドで実行しましたが、問題はありませんでした。

これは心強いことですが、Domino COM オブジェクトが完全にスレッドセーフであることを証明するには不十分だと思います。

于 2011-12-13T21:39:09.963 に答える