2017-03-21 7 views
0

私は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

答えて

0

回答はこの文である

ありがとう:リモートクラウドサーバ

これは、データベースのアクセス時間が、ここではカウントネットワーク待ち時間はありません。あなたのアプリケーションは、リポジトリとサービスクライアントがどのように実装されているかによってかなり混乱するかもしれません。ローカルでは問題ではありませんが、クラウドを使用すると大きな違いが生じます。

アプリ(すなわち。いないリモートのSQL Serverに接続するローカルPCから)リモートに展開試運転を確認してください。ジオロケーションのデータベース設定を確認して、データベースサーバーとアプリケーションサーバーが同じ場所にあり、完全に同じデータセンター内にあることを確認してください。

しかし、このシナリオは全くネットワークインターフェイスを使用していないので、あなたは、単一層(SQL +同じマシン上でホストされているアプリケーションサーバー)のように素晴らしい結果を達成することはありませんので注意してください。

+0

ありがとうございます。私はあなたの返事を理解していると思います...私が上で行った61msの往復測定は、正確にそれを測るものではありません:server + SQL latency?しかし、私は何とかミラーが必要になるでしょうが、同じサーバー上にapp + dbを実装しようとする最後の声明に同意します... –

関連する問題