入力データに基づいてシミュレーションを実行するために作成されたライブラリを使用しており、Run(Data data)
.
ただし、残念ながら、ライブラリは値を静的メンバーとして内部的に保存するため (理由はわかりませんが、変更することはできません)、複数のスレッドが内部的に同じデータに影響を与えているときに同時に複数のシミュレーションを実行しようとすると問題が発生します。 .
複数のシミュレーションを同時に実行する理由は、ユーザーが値の範囲を指定し、すべての出力集計を比較可能な形式で表示できるようにするためです。
当初、この問題を回避する最も簡単な方法は、計算を実行して結果をダンプする別のプロセスとして生成できる単純なコンソール アプリケーションを作成することだと考えていました。ただし、シミュレーションを実行するには大量のデータをメモリにロードする必要があり、個別のプロセスを生成することは、このデータを複数回ロードする必要があり、シミュレーションを連続して実行するよりもはるかに遅くなり、数ギガバイトを占有する可能性が高いことを意味します。メモリの。
したがって、基本的には、各スレッドのローカル ストレージを作成する方法を探しています。ライブラリを変更できる場合は、次のようなコードを検討します。
[ThreadStatic]
public static int Foo { get; set; }
ローカルスレッドストレージを使用するために、アセンブリ/静的クラス宣言を変更せずに指定する方法はありますか? それとも、実行時に同じアセンブリへの複数の参照を効率的に作成する方法でしょうか?