代码之家  ›  专栏  ›  技术社区  ›  MichaelGG

Silverlight:如何获取processorCount?

  •  3
  • MichaelGG  · 技术社区  · 17 年前

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

    我的问题是System.Environment.ProcessorCount是安全关键的,因此我无法轻松检查它。

    我不想只将用户工作项排队,因为我不想让更多的处理器执行——这不会有帮助。

    这里描述了一种解决方法: http://www.codeproject.com/KB/silverlight/multicore.aspx

    但它有点黑客,要使它对4或8线程系统合理可靠还需要一些工作。

    解决这个问题的“正确”方法是什么?或者Silverlight只是让你走运?

    2 回复  |  直到 17 年前
        1
  •  3
  •   Matt Ellis    16 年前

    此方法是SecurityCritical而不是SecuritySafeCritical这一事实很可能是由于桌面版本.NET框架版本一度要求环境许可才能获取此数据而造成的。

    从那以后,我们放宽了桌面方面的需求,所以在Silverlight上,这确实是安全关键的。我提出这是一个问题,我们应该在未来的siverlight版本中解决这个问题,看起来我们能够做到这一点。

    如果您在Silverlight中发现更多的公共方法认为它们应该是安全关键的而不是关键的情况,请在 Microsoft Connect . 真正的人会关注这些问题,这是你让我们知道你的痛点的最佳选择。

    目前看来,您必须使用提供的解决方案,但在某个时候,我们将在此处修复安全注释。

    这已在Silverlight 4中修复。

        2
  •  1
  •   MikeJ    17 年前

    我不知道代码项目检测机制有多糟。如果没有其他的东西,您可以将该代码打包成一个方法来对其进行初始戳。当一个更好的检测方法出现时,您将实现更改为那个方法,但我理解这个问题,即您只能保证知道至少有2个核心。当然,这取决于您想要执行的线程,在优秀的硬件上性能较差。

    另一个糟糕的事情是允许用户像7zip一样调整他们想要在应用程序中运行的线程数。如果检测到2+内核,那么可以公开一个spin控件,让用户决定需要多少线程。比自动检测更笨拙,但至少在4+核的情况下,您希望代码运行更优化。