2011年8月21日日曜日

Visual C#でAny CPUはダメなんだそうで

2014/07/03 追記) Visual Studio 2012 Expressだと「プロジェクトのプロパティ - ビルド」でプラットフォームターゲットを Any CPU にすると、すぐ下の「32ビットの優先」を選ぶことができるようになっています。それをふまえて、昔の情報として読んでください。


Visual C# 2010 Expressを使い始めてから1~2ヶ月経ちました。 で、使い始めたころから気になっていたけど放置していたこと、「x86」について調べてみました。 ここでいうx86っていうのはプラットフォームのことです。 Visual C# 2010 Expressでは次のプラットフォームを対象にした実行ファイルを作成できます。

  • x86
  • Any CPU
  • Itanium
  • x64

64bit版のOSを使っていたとしても、Visual C#のデフォルトはx86です。 作ったx86版のアプリケーションを実行しタスクマネージャでプロセスを見ると*32が付いているので確認できます。 x86以外のプラットフォームを選択するには構成マネージャを開いてプラットフォームの新規作成をしなければなりません。 ちょいと面倒です。

よく考えずに「なんでデフォルトがAny CPUじゃないんだろうなぁ」などと思い浮かべつつ、こういうページとかで情報収集しました。

基本的なことが書いてあって大変助かります。

趣味でやってるプログラミングで英文翻訳する根性とか、ごくたまにしかわかないので大変助かります。

「...Any CPUからx86...」の投稿について、興味深いですね。 「x86とx64の両方でテストが必要になる」ってのはJavaの「Write Once,Test Anywhere」をすぐに思い出し「そりゃそうだ」となりました。 「CPUキャッシュのせいで32bitの方が速くなる」ってのは目から鱗ですね。 連続した大量のデータを扱うとき以外は32bitの方が良いってことでしょうか? 大量のデータを扱うソフトを作るときは実際にパフォーマンスを測って調べないとどっちがいいか分からないのでしょうね。 まぁ、そんなソフト自分じゃ作りませんけど。

デフォルトがx86っていうのは現実路線だったんですね。 でもまぁ、趣味で使う人が多いExpressエディションの場合はAny CPUをデフォルトにして人柱にするっていうのもありだと思うんですが、どうでしょう? 64bit OSを使う人に向けてはx64ですらいいのではないでしょうか? 「将来性! 将来性!!」って連呼しながら。 dllとか使う人は勝手にx86にするでしょうしね?

私がこれから作るソフトは、多分自分しか使わないだろうからAny CPUかx64でいいかな? と思ったけどx64かx86かで性能が激変するようなソフトは作らないだろうから、やっぱりデフォルトのままかも。