【发布时间】:2011-11-23 01:55:07
【问题描述】:
我有 1 个集合,我正在将内容保存到持久存储中。然后我最终得到了 3 个我喜欢保存到持久存储中的集合。
起初我使用 ThreadPool 来保存一个集合,但现在我有 3 个集合。由于每个集合都进入不同的存储,我不想将它们组合或保存到同一个地方。
我的问题是我应该使用手动线程并为每个 Save() 方法创建一个线程,还是应该为每个方法创建 3 个线程池,还是应该在一个 ThreadPool.QueueUserWorkItem 调用中调用所有 3 个方法。
1.第一种方法
ThreadPool.QueueUserWorkItem(o =>
{ Save<Foo>(ConcurrentCollectionStorage.Bus1);
Save<Bar>(ConcurrentCollectionStorage.Bus2);
Save<Car>(ConcurrentCollectionStorage.Bus3);
});
2. 第二种方法
ThreadPool.QueueUserWorkItem(o =>
{ Save<Foo>ConcurrentCollectionStorage.Bus); });
ThreadPool.QueueUserWorkItem(o =>
{ Save<Bar>(ConcurrentCollectionStorage.Bus2); });
ThreadPool.QueueUserWorkItem(o =>
{ Save<Car>(ConcurrentCollectionStorage.Bus3); });
3. 第三种方法。手动创建线程并加入它们。
在执行这些操作时,我不希望我的应用程序挂起。我希望它处理和保存数据,完成,但不影响前台进程,整个应用程序。
最好的方法是什么?
我应该使用哪一个?有没有更好的方法来做到这一点?
【问题讨论】:
-
线程可以为您购买更多的 CPU 周期,而不是更多的磁盘。目前尚不清楚这里的关键资源是什么,但很可能不是 cpu 周期。
-
继续@Hans Passant,为什么要使用 3 个线程?您不能将所有 3 个集合都排队到一个线程吗?您可以将所需的目标服务器/文件夹/任何内容加载到每个项目中,以便线程知道将其放在哪里。
-
嗯,是的,这不是很受 cpu 限制,但我希望它们在不影响应用程序的情况下发生,这就是为什么我想将它们作为线程池运行。你能想到什么更好的吗?
标签: c# .net multithreading concurrency threadpool