【发布时间】:2013-07-04 11:06:36
【问题描述】:
我正在使用一个库,该库是为基于输入数据执行模拟而创建的,具有单个入口点,例如 Run(Data data)。
但是不幸的是,库内部将值存储为静态成员(我不知道为什么,但我无法更改它),因此在尝试同时执行多个模拟时会出现问题,因为多个线程正在影响内部数据相同。
我想同时运行多个模拟的原因是为了让用户能够指定一系列值,并将所有输出聚合并以可比较的格式呈现。
最初我认为解决此问题的最简单方法是编写一个简单的控制台应用程序,该应用程序可以作为一个单独的进程生成,以执行计算并转储结果。但是,需要将大量数据加载到内存中才能运行模拟并生成单独的进程,这意味着这些数据需要多次加载,并且比顺序运行模拟要慢得多,并且可能会占用几 GB内存。
所以基本上我正在寻找一种为每个线程创建本地存储的方法,如果我可以修改库,我会查看如下代码:
[ThreadStatic]
public static int Foo { get; set; }
有没有办法指定一个程序集/静态类声明,而不修改它,以使用本地线程存储?或者也许是一种在运行时有效地创建对同一程序集的多个引用的方法?
【问题讨论】:
-
'库内部将值存储为静态成员':((我想知道为什么库开发人员以这种方式削弱他们的代码?
-
我认为他们将它从一些较旧的代码库移植到 .NET,因此它可能是某种第 3 方编译器的结果。
标签: c# .net multithreading static-libraries .net-4.5