C# ThreadLocal<;T>;在一定条件下不断增大

C# ThreadLocal<;T>;在一定条件下不断增大,c#,.net,multithreading,threadpool,parallel.foreach,C#,.net,Multithreading,Threadpool,Parallel.foreach,我正在运行一定次数的迭代模拟。每次迭代结果发送后,服务器都会发送更新数据,并在一段时间后用于下一次迭代 代码(非常粗略)如下所示: for(var iteration=0;iteration<100;iteration++) { Parallel.For(0,50,i=>DoExpensiveWork(i)); SendResultsToServer(); //worker sends iteration results to server //server gathers

我正在运行一定次数的迭代模拟。每次迭代结果发送后,服务器都会发送更新数据,并在一段时间后用于下一次迭代

代码(非常粗略)如下所示:

for(var iteration=0;iteration<100;iteration++)
{
 Parallel.For(0,50,i=>DoExpensiveWork(i));
 SendResultsToServer(); //worker sends iteration results to server

 //server gathers results from all workers, 
 //calculates update, then sends it back to workers
 WaitForDataForNextIteration(); 
}
我想要的基本上是停止
ThreadLocal
缓存创建新条目,这样在我的例子中就不会增长到32以上


编辑:来自MSDN:当需求较低时,线程池线程的实际数量可能会低于最小值。这可能解释了为什么创建越来越多的
ThreadLocal
副本。有什么解决方法吗?

不能保证在使用parallel.for(以及为什么要这样做?)时,相同的线程会被重复使用,因此在这种情况下,使用ThreadLocal for cache可能不是最好的方法。为什么不使用MemoryCache,如果不访问,它会在一定时间段后删除缓存项,这将避免内存泄漏。
ThreadLocal<MyCache> _cache;

private void DoExpensiveWork(int i)
{
   var cache = _cache.Value;
   DoSomeWorkUsingCache(cache);
}
ThreadPool.SetMinThreads(32,1000);
ThreadPool.SetMaxThreads(32,1000);