VB .NET 4.0 / VS2010 で記述された .NET アプリを取得し、すべてのプロジェクトをデバッグ構成とリリース構成の両方で AnyCPU 設定に設定してコンパイルしました。このアプリを 64 ビット環境 (Windows Server 2003 R2 および 2008 R2 でテスト済み) で実行すると、約 6 ~ 12 秒ではなく、少なくとも 2 倍の時間がかかる (絶対値で約 25 秒) ことに気付きました。 32 ビット環境 (Win XP および 7) で数秒で起動します。
64 ビット システムは強力なサーバーであり、テスト済みの他の 32 ビット システムよりも確実に強力であることを付け加えておきます。他のすべてのアプリは 64 ビットでより高速でしたが、私たちの貧弱なアプリではそうではありませんでした;) (また、さまざまな時間、さまざまな負荷の下でアプリをテストしましたが、結果は常にほぼ同じです。)
上記のように、アプリは AnyCPU を使用して構築されており、64 ビット OS で 64 ビット アセンブリとして実行されます (TaskManager で確認)。アプリ自体は WinForms アプリであり、NetAdvantage Forms v10.3 を利用しており、MS SQL Server 2008 に対して定期的にクエリと書き込みを行っています。
さまざまなターゲット マシンがすべて同じネットワーク上にあるため、たとえばデータベースへのパス (パフォーマンス テストには同じデータベースが使用されました) は同じです。問題はデータベースやネットワーク自体にあるとは思いません。
私には奇妙に思えましたが、MainForm の起動時にストップウォッチを使用してさまざまな「プロファイリング手順」を組み込んだときに、64 ビットでは InitializeComponent メソッドに 2 倍の時間がかかり、1.5 秒に対して約 4 秒かかることに気付きました。 32ビットで。
これは、両方のシステムに展開するまったく同じアプリであり、異なる構成はありません。
だから私は2つの質問があります:
これの原因は何でしょうか?
そして:「問題のある」コードを特定する最善の方法は何ですか? 現在、私はストップウォッチを使用して、それを絞り込もうとしています。しかし、私たちのアプリに関する限り、64ビットマシンではすべてが遅いように見えるので、特定のステートメントに分解できるかどうかはあまりわかりません.
ご協力いただきありがとうございます。