【发布时间】:2011-02-24 14:18:53
【问题描述】:
我在 Silverlight/C# 中创建了一个渲染器。目前我正在使用System.Threading.ThreadPool 来安排并行渲染图块。这现在效果很好,但我想限制使用的线程数。
由于它在 Silverlight 上运行,因此存在一些限制:
- 如果我调用
ThreadPool.SetMaxThreads,应用程序会崩溃as documented。 - 没有任务并行库
我看到了几个选项:
- 查找 OSS/第三方线程池
- 实现我自己的线程池(我宁愿不)
- 使用 Rx(我在其他地方也这样做)
是否有任何经过测试的替代线程池可与 Silverlight 一起使用?
或者任何人都可以想出一个 Rx 表达式来产生有限数量的线程并在这些线程上排队工作?
【问题讨论】:
-
为什么要更改线程数。要使用线程池,您的任务不应长时间运行。因此,考虑到它已经设置为核心数量这一事实,它必须非常有效。您是否在 wpf 应用程序中尝试过您的代码,并确认应用程序使用您设置的数字更有效地工作?
-
我没有使用 WPF 应用程序进行测试,我不确定它是否会更有效。我想试试这个,看看它是否更有效,我希望能够这样做以调试和理解任何同步问题。
-
很难调试多线程应用程序,相信我,您不会看到太多同步问题,因为程序会遇到断点并自行暂停。为此您需要一个分析器。看看[这个] (stackoverflow.com/questions/2222826/…)
-
是的,当然.. 调试和理解同步问题是我提到的两个不同的需求。
标签: c# silverlight threadpool system.reactive