いくつかの NUnit テスト プロジェクトを x86 から AnyCPU に切り替え、nunit-console-x86.exe の代わりに nunit-console.exe を使用して 64 ビット ランタイムで実行し始めました。これにより、非常に驚いたことに、テスト期間が 50 ~ 100% 長くなりました。任意のテスト アセンブリで簡単に繰り返しシミュレートでき、テストの実行をプロファイリングすることもできますが、64 ビットではすべてのパフォーマンスが低下しているように見えるため、パフォーマンスの低下の原因を突き止めることはできません。また、いくつかの異なるマシンでテストを実行しようとしましたが、同じ結果が得られました。
テスト アセンブリは、Spring.NET IOC および Oracle ODP マネージド プロバイダーを使用して (これがテストを x86 から AnyCPU に切り替えた理由です) 統合テストを実行します。テスト実行の唯一の違いは、実際には 32 ビット環境と 64 ビット環境、または nunit 実行可能ファイル (nunit-console-x86.exe と nunit-console.exe) の違いだけです。
このような大きなテスト期間の違いには一般的な理由がありますか? または、問題の原因を突き止めるために何をチェックすればよいか、誰かが知っていますか?
ファローアップ:
この問題は、この 8 月にリリースされた Oracle ODP.NET Managed Driver (バージョン 121010 または 4.121.1.0) が原因で発生します。どうやら多くのパフォーマンスの問題があり、そのうちの 1 つは 64 ビットのパフォーマンスの低下です。32 ビット環境で次のコードを実行した場合は約 0.6 秒、64 ビット環境で実行した場合は約 1.5 秒かかりました。
var sw = Stopwatch.StartNew();
using (var conn = new OracleConnection(ConnectionString))
{
conn.Open();
for (var i = 0; i < 100; i++)
{
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "select sysdate from dual";
var result = Convert.ToDateTime(cmd.ExecuteScalar());
}
}
}
Console.Out.WriteLine(sw.Elapsed);
Oracle ODP.NET Managed ドライバーから許容できるパフォーマンスを得る方法はありますか、それとも、Oracle が「最終」リリースであると主張しているにもかかわらず、まだ本番環境に対応していないだけですか? ネイティブの ODP.NET プロバイダーに戻す以外に選択肢はありますか?