2

コード (C#) でアンマネージ ライブラリ (C++ で記述) を使用しています。ライブラリが提供するすべてのメソッドは静的です。P/Invoke を使用してライブラリと通信します。ライブラリの仕組みは次のとおりです。

  1. 他のすべてのメソッドを呼び出す前に呼び出す必要がある初期化メソッドがあります (これは 1 つのパラメーターを取り、そのパラメーターは初期化中にのみ設定できます)。
  2. ライブラリのさまざまな設定を変更する設定メソッドがあります。ライブラリの動作方法を変更する必要がある場合は、これを実行する必要があります (ライブラリの微調整のようなものです)。設定はいつでも変更できます。
  3. 数値の配列を受け取り、別の配列を返すメソッドがあります。これを中間操作と呼びましょう。この操作には時間がかかるので、キャッシュして毎回計算しないようにしたいです。
  4. 前のメソッド (中間操作)によって返された配列は、結果を作成する最後のメソッドへの入力です。これを主な操作と呼びましょう

私は通常、ライブラリの異なるインスタンスを持ちたいと思います.1つは設定 Aで、もう1つは設定 Bです。ライブラリは静的なので、できません。

このライブラリをインスタンス クラスにラップするにはどうすればよいですか? おそらく、私のクラスのすべてのインスタンスは、ライブラリの新しいインスタンスをメモリにロードする必要があります (ライブラリ自体のすべてのインスタンスは静的であり、ライブラリの 1 つのインスタンスで 2 つの異なる設定を持つことはできません)。

ライブラリを書き直す以外に、これに対する回避策はありますか (ライブラリの書き方を制御できないため)。

そして、操作メソッドの並列呼び出しを処理できるようにしたいと思っています。

4

2 に答える 2

0

コメントで提案したように、口蓋化が必要な場合、私が考えることができる唯一の回避策は、マルチプロセスアプローチを使用することです。つまり、各「設定」を独立したプロセスにラップします。もちろん、プロセス間の通信とデータ トラフィックがボトルネックの新たな候補になります (WCF 名前付きパイプ、Remoting、WM_COPYDATA、またはソケットを使用するかどうかに関係なく)。

于 2013-02-13T11:48:02.333 に答える