2016-12-02 3 views
2

SaveChangesSaveChangesAsyncの主な違いは何かを説明できますか?どこでSaveChangesAsyncを使用する必要がありますか? パフォーマンスはどのように変化しますか?SaveChangesとEntity FrameworkのSaveChangesAsync

Asyncronous機能:

private static async void AddStudent() 
{ 
    Student myStudent = new Student(); 
    using (var context = new SchoolDBEntities()) 
    {   
     context.Students.Add(myStudent); 
     await context.SaveChangesAsync();   
    } 
} 

Syncronous機能:事前に

private static void AddStudent() 
{ 
    Student myStudent = new Student(); 
    using (var context = new SchoolDBEntities()) 
    {   
     context.Students.Add(myStudent); 
     context.SaveChanges();   
    } 
} 

おかげ

私はここで2つの例を持っています!。

答えて

6

あなたの非同期の例は次のようにする必要があります:

private static async Task AddStudent() 
{ 
    Student myStudent = new Student(); 
    using (var context = new SchoolDBEntities()) 
    {   
     context.Students.Add(myStudent); 
     await context.SaveChangesAsync();   
    } 
} 

同期および非同期呼び出しの違いは、後者は呼び出し元のスレッドをブロックしていないということです。データベース操作はI/Oバウンドです。ネットワークは高速化されておらず、SQLクエリは処理に時間がかかります。したがって、結果を待つ代わりに(スレッドをブロックする)、そのスレッドをスレッドプールに戻して、同時のユーザー要求を処理できるようにします。これは、複数のユーザーがサイトに同時にアクセスした場合のスケーリングに不可欠です。しかし、async/await機能を利用するには、コールチェーン全体をスタック上で非同期にする必要があります。

async/awaitの基本的なイントロをthisのように読むことをお勧めします。

+0

I/Oバインド操作は、file、socket、netpipeの読み書きのような多くの入出力呼び出しを実行します。これらの操作は遅く、ほとんどのCPUパワーを必要としません(当然イベントベースです)。逆に、CPUバインド操作、すなわち画像処理、メモリ内収集集計などの多くの計算を行うもの。 – UserControl

+0

ありがとう、@UserControl –

+0

savechanges中に100%CPU負荷があります。非同期/メモリの汚れたチェックにバインドされたCPUの多くを行う必要がある場合、助けを待つだろうか? –

関連する問題