私はEntity Framework 6.1と を使ってC#.NET 4.5コンソールアプリケーションを持っていますが、私はUnit of Workパターンを使用しています。私のtblFillsテーブルにエントリを追加する必要があるコードの典型的な例:EFでローカルsqlexpressを使用すると、予想よりもパフォーマンスが向上します。どうして?
var fillRep = UnitOfWork.Instance.GetRepository<tblFills>();
fillRep.Add(fill);
UnitOfWork.Instance.Commit();
私のシミュレーションの1つで900のデータベース書き込みが可能です。リモートサーバ(リモートクラウドサーバー上のSQL Serverをホスト)を使用して
は、私のシミュレーションは、午前6時21分(6分、21秒)を要します。これはトランザクションあたり平均25秒です(他の処理も同様です)。 私のコードの始めに、ダミーのテーブルに10回のデータベース書き込みを行い、それを時間切れにしてから、平均データベースアクセス時間を10に割ります。このシミュレーションは61msのアクセス時間を示しました。
マイ性能試験コード:
Private void SqlPerformanceTest()
{
Logger.Debug("Starting SQL Performance Test...");
int iterations = 10;
TempPerformance tp = new TempPerformance();
tp.Quantity = 10;
TimeSpan startTime = DateTime.Now.TimeOfDay;
for (int i = 0; i < iterations; i++)
{
UnitOfWork.Instance.GetRepository<TempPerformance>().Add(tp);
UnitOfWork.Instance.Commit();
}
DateTime elapsedTime = DateTime.Now.Subtract(startTime);
Logger.Debug("Done. Average SQL access for adding entires is: {0} ms", elapsedTime.TimeOfDay.TotalMilliseconds/iterations);
}
私はその後、私が実行しているローカルSQLEXPRESSインスタンスに私の接続文字列を切り替えると、私のシミュレーション時間は10秒に6分以上から行きます。私は、データベースのアクセス時間は、2つのシミュレーションの唯一の違いであると考えているので、
これは私には意味がありません。
誰かが私の理解を助けることができますか?
要約: 1)データベースにアクセスする時間が61ミリ秒の外部データベースを使用して、データベースへの書き込みを900回行うと、シミュレーションに6分以上かかる。 2)ローカルデータベースを使用すると、同じシミュレーションに10秒かかります。
本当にありがとうございました。
リモートサーバーは、Windows 2008 Server R2 Datacenter上でSQL Server 2014を実行しています。私はアクセス時間を測定するので、これは問題ではないと思うが、私はそれに言及すると思った。あなたの質問へ -Ed
ありがとうございます。私はあなたの返事を理解していると思います...私が上で行った61msの往復測定は、正確にそれを測るものではありません:server + SQL latency?しかし、私は何とかミラーが必要になるでしょうが、同じサーバー上にapp + dbを実装しようとする最後の声明に同意します... –