アプリケーションが終了すると、経過時間がメッセージボックスに表示されます。 32bit環境で上記アプリケーションを実行してみます。アプリケーションを終了し[Visual Studio]のメニューから、[ビルド(B)]‐[構成マネージャー(O)]を選択します。[アクティブソリューション プラットフォーム(P)]リストボックスから<編集...>を選択し、[プラットフォーム(P):]から「x64」を削除します。

再度アプリケーションを実行し、同様に[Windows タスク マネージャ]から[パフォーマンス]タブと[プロセス]一覧を確認してみましょう。[プロセス]一覧からアプリケーションの使用メモリが約1GByteに達した時点で[System.OutOfMemoryException]の例外が発生します。
この「System.OutOfMemoryException」の例外は、大容量のデータセットをメモリに読む込むなどの処理を実施した際に発生します。 64bit環境で動作させた際にはこの例外が発生しませんでしたが、 32bit環境の場合は扱えるメモリ空間が少ないため大量のデータをデータセットに取得するような処理を行うと、このようなエラーが発生してしまいます。
では、データを取得する速度は64bitと32bitで違いがあるか、確認してみましょう。先ほど作成した以下のコードの部分で、ループの回数を10回から3回に変更し、32bitでもエラーが発生しないような環境で違いを比べてみます。コード中にストップウォッチが仕込まれ、経過時間がメッセージボックスで表示されるようになっているので、速度結果を比べてみてください。
private void button2_Click(object sender, EventArgs e)
// 約100万行データの取得を3回繰り返す
for (int iCnt = 0; iCnt < 3; iCnt++)
{
da.Fill(dt);
}
}
Private Sub button2_Click(sender As System.Object, e As System.EventArgs) Handles button2.Click
'// 約100万行データの取得を3回繰り返す
For iCnt As Integer = 1 To 3
da.Fill(dt)
Next
End Sub
環境(キャッシュの有効、メモリサイズ)によって速度が異なるので一概には言えませんが、上記コードを実施した結果、64bitのほうが約5%程度アクセス速度が速い結果になりました。
おわりに
64bitアプリケーションの大きなメリットは大量のメモリ空間を利用したアプリケーションが開発できる点です。クライアント側で大量メモリを利用することは少ないかもしれませんが、サーバーサイドで行うASP.NET MVC等の処理では大量のクライアントからのアクセス情報をセッションに格納したり、複数テーブルの内容をデータセットに格納しておき、各クライアントが参照するようなケースが増えると想定されます。それらの処理は大量のメモリを消費するため、大量のメモリ空間にアクセスできる64bitアプリケーションは現在のシステム構築においては必須であるといっても過言ではありません。
ぜひ、この機会に「64-bit ODP.NET」を試していただき、そのメリットを実感してください。
※本文中、意見にわたる部分は、執筆者個人の意見表明です。
参考資料
- Oracle Data Provider for .NET開発者ガイド 11g リリース2(11.2):Oracle Technology Network


