Visual Studio 2008、2010、または2012(v11)はマルチコアを使用するように作成されていますか?

StackOverflow https://stackoverflow.com/questions/1814015

質問

基本的に、2010および2012のVisual Studio IDEおよび/またはコンパイラがマルチコア環境を使用するために書かれているかどうかを知りたい(すべてのバージョンでマルチコア環境をターゲットにできることを理解している並列処理を使用しますが、それは私の質問ではありません)。

どのプロセッサがVisual Studio 2010または2012で可能な限り最高のエクスペリエンスを提供するかを試したいので、高いクロックデュアルコアを取得するか、低いクロッククアッドコアを取得するかを決定しようとしています( v11)(ideおよびバックグラウンドコンパイラ)。

1つのコアで最も重要なセクション(バックグラウンドコンパイラと他のideタスク)を実行している場合、クアッドコアを実行すると、特にバックグラウンドコンパイラが最も重いタスクである場合、コアの切断が速くなります。複数のプロセスで分離するのは難しいため、マルチコアを使用している場合でも、処理の大部分がまだ1つのコアで発生するようにバインドされている場合は、より高いクロックCPUを使用した方がよい場合があります(つまり、最も重要な部分VS環境の)。

私はVBプログラマーです。2010年と2012年にパフォーマンスが大幅に向上しました。おめでとうございます(恐ろしいグレースケールデザインとすべての大文字を除く)。しかし、VSをシームレスに使用できるようになりたいです。誰にもアイデアがありますか?また、一度に1つのプロジェクトしかコーディングしないので、ソリューションのロード時間についてあまり心配していません。

ありがとう。

役に立ちましたか?

解決

おそらく、より高いクロックのデュアルコアを使用した方が良いと思います。 VS(および今日のほとんどのアプリ)はまだマルチスレッドの大きな利点を活用していないと思います。 VSでは数十のスレッドが実行されている場合がありますが、実際にそれらをうまく活用できるのは操作のサブセットのみです。 VS実装の多くはSTAスレッドで実行されるC ++ COMコンポーネントであるため、UIスレッドは多くのシナリオで大部分の作業を行います。 VS2010の一部としてVSシェルの多くの部分がマネージコードで書き直されているという事実は、これらの古代コンポーネントSTA依存関係の多くを解消するのに役立ちます。他の人が述べたように、いくつかの重要なシナリオ(大規模なソリューションの構築など)はすでに複数のコアを活用しています(MSBuildは並列でうまく機能します)。しかし、IDE UIの使用やバックグラウンドコンパイルなどの場合、これらのほとんどはまだほとんどシングルスレッドであると思います。仕事でクアッドコアボックスを使用していますが、VS2008がCPUリソースの25%以上を使用することはほとんどありません。 (VS2010は、どのシナリオが優れているかを知るのに十分なほど本格的に使用していませんが、少なくともいくつかは優れていることを知っています。)

他のヒント

MSBuildは、プロジェクトの並行ビルドをサポートしています。 Visual Studio 2008は、複数のプロセッサを利用してプロジェクトをコンパイルします。

他の人が指摘したように、MSVS 2010は実際にコンパイルに複数のプロセスを使用します。ただし、コンパイル時間の大幅な短縮には自動的には変換されません。 中規模のC ++プロジェクト(約200ファイル)でテストを行いました。 2.8Ghzのクアッドコアより3.4Ghzのデュアルコアで高速に構築されました。デュアルコアプロセッサは安価ですが。 (システムは、それぞれ4GiB DDR2 Ramと実質的に同一です)。 また、コンパイル中にデュアルコアプロセッサが最大70%にロードされたことにも注意する必要があります。ご覧のとおり、VS2010が2つのコアでも完全にロードできない場合、4つ以上のコアがあることのポイントは何ですか?

CPUを忘れてください。マシンに与えることができる最大のパフォーマンスの向上は、ソリッドステートドライブです。 ResharperやIntellisenseなどのコンパイルおよびバックグラウンドプロセスはIOを集中的に使用するため、Visual Studioの主なボトルネックはIOです。現在のようにシングル、デュアルクアッド、8コアのいずれを使用しているかに関係なく、VSがCPUを最大限に使用するのを見たことはありません。

更新 コメントありがとうございます@Erx ...進行中の正確なプロセスについて私は専門家ではありません。ただし、プロジェクトをコンパイルするためだけにコンパイラが行う読み取り回数を考えても、IOヒットに驚かないでしょう。 Visual Studioはファイルをメモリ内に保持する場合がありますが、プロジェクトをビルドし、変更を保存していない場合、ビルドが開始される前にファイルが最初に保存されることに気づきましたか?これは、msbuildコンパイラが保存されたファイルにアクセスしており、インメモリファイルを使用していないことを示しています。 VSでファイルを閉じた場合、VSのメモリ管理によってクリーンアップされた可能性があるため、ファイルがメモリ内にあるという保証はありません。そのため、コンパイラがクリーンなコピーを取得することは理にかなっています。これは、数百または数千のファイルになる場合があります。次に、コンパイル済み出力の書き込み、NuGetパッケージの読み取り、ConfigGenスクリプト( http://configgen.codeplex.com/)。写真が撮れます。

また、Intellisenseがファイルシステムに対して多くの読み取りと書き込みを行うことをどこかで読んだことがあります。そのため、低速のHDDを使用している場合、パフォーマンスがさらに低下します。

Resharperなどのプラグインも、特にバックグラウンドコンパイルでファイルシステムにヒットします。 Resharperは最高の生産性ツールであるため、Resharperを削除することを決して推奨しません。繰り返しになりますが、最新の利用可能なコアと膨大な量のRAMを備えた派手な新しいシステムを使用している場合は、新しいSSDに数百ドル/£ 100を費やしてください。後悔することはありません。

また、問題に関するスコット・ガスリーの沼地をチェック http://weblogs.asp.net/scottgu/archive/2007/11/01/tip-trick-hard-drive-speed-and-visual-studio- performance.aspx 具体的には、「...必要に応じて、CPUプロセッサの速度を追加購入する代わりに、より高速なディスクへの投資を優先する」と引用しています。誰かが知っている必要がある場合は、Visual Studio開発チームのヘッドが知っていることを期待します。

検討すべきことは、開発環境で仮想化を使用することです。 Visual Studioがそうであるかどうかに関係なく、仮想化は間違いなく複数のコアを利用します。それぞれ独自のVMを備えた複数の開発環境があります。

質問はVS2012に言及するように編集されていますが、ほとんどの回答はリリース前にさかのぼります。 VS2012は、標準機能として並列ビルドを導入しました。そのため、対応するCPUでより多くのコアを簡単に利用する機会が増えます。ただし、前述のように、コンパイル時間を短縮する場合は、高速のハードドライブ、できればハイエンドのSSDが不可欠です。

ハードドライブまたはCPUのどちらが良い投資であるかについてはいくつかの議論がありますが、どちらかを改善することは大きな影響を与えるはずです。ほとんどの市場では、開発者の時間のコストがハードウェアのコストをはるかに上回っているため、通常は、できる限り最高のCPUとハードドライブを購入するのが最善です。考慮すべき唯一のことは、それらの最上位でリターンを減少させる法則です。

VS2012での並列ビルドに関する記事からの引用:

  

Visual Studio 2010には、"最大並列数のオプションが含まれていました   プロジェクトのビルド。"制限の兆候はありませんでしたが、   このIDEオプションは、C ++プロジェクトでのみ機能しました。幸いなことに、これ   Visual Studio 11には制限が適用されなくなりました。   他の言語の並列ビルドも完全にサポートされます。表示するには   これは、Process Explorerのコピーを実行すると同時にソリューションを実行します   多くのプロジェクトが構築されています。複数のMSBuildが表示されます   インスタンスが作成されます-"最大数で指定された数   並列プロジェクトビルドの"

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top