最近、Silverlight 5 の async/await(asyncctp) 機能に関していくつかのテストを実行しました。
次のハードウェアが両方のテストに使用されました。
- インテル snb 2.3g
- 8gDDR
- Windows 7 - 64 ビット
- シルバーライト 5
- SQL Server 2008 - R2
テストロジックは次のとおりです。
非同期/待機なし:
public void LoadMasterItem(string strUNIT_ID) { **DateTime dt = DateTime.Now;** ctx.OBS_UNITs.Clear(); this.IsMasterItemBusy = true; ctx.Load(ctx.GetOBS_UNITQuery().Where(p => p.UNIT_ID == strUNIT_ID)).Completed += (sender, e) => { this.MasterItem = ctx.OBS_UNITs.FirstOrDefault(); this.IsMasterItemBusy = false; LoadDataArgs args = ExceptionManager.CheckDataContextResult(sender, args); **var ts = DateTime.Now.Subtract(dt).Ticks;** **string str = ts.ToString();** }; }
非同期/待機あり:
public **async** Task<LoadDataArgs> LoadMasterItem(string UNIT_ID) { **DateTime dt = DateTime.Now;** ctx.OBS_UNITs.Clear(); var oper = await ctx.Load(ctx.GetOBS_UNITQuery().Where(p => p.UNIT_ID == UNIT_ID)).AsTask(); LoadDataArgs args = ExceptionManager.CheckDataContextResult(oper); if (args.LoadState) { this.MasterItem = oper.Entities.FirstOrDefault(); } **var ts = DateTime.Now.Subtract(dt).Ticks;** **string str = ts.ToString();** return args; }
実験 1 のティック数: 5304010
実験 2 のティック数: 30001
async/await を使用すると、Silverlight アプリケーションがこれほど大幅に改善される理由と方法に興味がありました。私のテストが「不公平」だった場合は、どのように改善できるかについてもコメントしてください.
デバッグ モードを使用せずに、"str" 値を UI にバインドしました。これらは IIS でホストされ、IE9 で実行されました。
結果は次のとおりです。
1 のティック: 5504010
2 のティック: 5680325
回答ありがとうございます。実際のパフォーマンスに関しては、私が間違っていたようです。