Silverlight:如何获得ProcessorCount?

时间:2009-03-24 05:28:19

标签: silverlight multithreading

我有一个计算密集型任务,用户可以使用Silverlight应用程序执行。并行化是一项非常容易的任务。

我的问题是System.Environment.ProcessorCount是安全严重的,所以我无法轻易检查。

我不想只是QueueUserWorkItem,因为我不想拥有超过执行处理器的数量 - 这无济于事。

此处介绍了一种解决方法:http://www.codeproject.com/KB/silverlight/multicore.aspx

但它有点hackish,并且对于4或8个线程系统来说它是合理可靠的一些工作。

解决这个问题的“正确”方法是什么?或者Silverlight会让你在这里没有运气吗?

2 个答案:

答案 0 :(得分:3)

这个方法是SecurityCritical而不是SecuritySafeCritical的事实很可能是这样一个事实,即桌面版.NET Framework版本曾要求EnvironmentPermission获取此数据。

我们已经放宽了对桌面端的需求,因此在Silverlight上确实是非常有意义的是SafeCritical。我已经提出这个问题,我们应该在未来的Siverlight版本中修复它,看起来我们能够做到这一点。

如果您发现有更多情况,其中公共方法感觉它们应该是SafeCritical而不是Silverlight中的Critical,请在Microsoft Connect处提交一些反馈。真正的人会看到这些问题,这是让我们知道你的痛点的最佳选择。

现在看起来您将不得不采用所提供的解决方法,但在某些时候我们将在此处修复安全注释。

这已在Silverlight 4中修复。

答案 1 :(得分:1)

我不知道codeproject检测机制是那么糟糕。如果没有别的,你将该代码包装到一个方法中,以便对它进行初始攻击。当更好的检测方法出现时,您将实现更改为该实现,但我理解的问题是您只能保证知道至少有2个内核。当然,这取决于你想要做的线程在高级硬件上的性能较差。

另一个要做的事情就是允许用户调整他们想要在你的应用程序中运行的线程数,就像7zip一样。如果您检测到2个以上的核心,则可以使用旋转控件来让用户决定他们想要多少个线程。比自动检测更笨,但至少在4+核心的情况下,你希望代码运行得更好。