2009-03-24 11 views
3

私は、ユーザーがSilverlightアプリケーションを使用して実行できる計算集約型のタスクを持っています。パラレル化するのは非常に簡単な作業です。Silverlight:ProcessorCountを入手するには?

私の問題は、System.Environment.ProcessorCountがセキュリティクリティカルであるため、簡単に確認できないということです。

私はQueueUserWorkItemだけにしたくありません。なぜなら、実行しているプロセッサの数より多くのものを持ちたくないからです。それは役に立たないでしょう。

つの回避策は、ここに記述されている:http://www.codeproject.com/KB/silverlight/multicore.aspx

しかし、それは少しハックだし、それが仕事のビットが4つのまたは8スレッド・システムのため、それが合理的に確実なものにすることでしょう。

これを解決する「正しい」方法は何ですか?それとも、Silverlightはあなたをここから去らせてくれるのですか?

+0

4つのコアで動作するように単純にコーディングすることになりますか?私の経験では、単一のコアシステムのオーバーヘッドはそれほど悪くありません。 – Chris

+0

私はそれをベンチマークし、それがどれだけ傷つくかを見てみるつもりです。各タスクには1または2MBのデータがあるため、スレッドをさらに実行すると、オーバーヘッドの切り替えに加えてキャッシュに関する問題が発生すると思います。 – MichaelGG

答えて

3

SecuritySafeCriticalの代わりにこのメソッドがSecurityCriticalであるという事実は、ある時点でデスクトップバージョンの.NET FrameworkバージョンがEnvironmentPermissionをこのデータで取得することを要求していた可能性があります。

私たちはデスクトップ側の要求を緩和して以来、これがSilverlightのSafeCriticalであることは本当に意味があります。私はこれをSiverlightの将来のリリースで修正すべき問題として提起しました。これを行うことができるようです。

SilverlightでCriticalではなくSafeCriticalにする必要があると思われるパブリックメソッドがある場合は、Microsoft Connectでフィードバックを提出してください。実際の人々はこれらの問題を見ています。あなたの苦痛の点を知らせるための最善の策です。

現時点では、提供されている回避策を実行する必要があるようですが、ここではセキュリティ注釈を修正します。

これはSilverlight 4で修正されています。

1

私はcodeproject検出機構がすべて悪いことを知らない。他に何もない場合は、そのコードを最初のスタブを作成するメソッドにラップします。より良い検出方法が出てきたら、実装をその方法に変更しますが、少なくとも2つのコアがあることを保証することが保証されているという点でこの点を理解しています。これはもちろん、あなたがやりたいスレッディングに依存して、偉大なハードウェアではパフォーマンスが低下します。

あなたが7zipのようにあなたのアプリで実行したいスレッドの数を調整できるようにすることです。 2つ以上のコアが検出された場合は、スピンコントロールを公開して、必要なスレッドの数をユーザーが決定できるようにすることができます。自動検出よりも控えめですが、少なくとも4つのコアの場合は、コードがより最適に実行されることを期待しています。