我最近对 Silverlight 5 中的 async/await(asyncctp) 功能进行了一些测试。
两个测试都使用了以下硬件:
- 英特尔 snb 2.3g
- 8g DDR
- 视窗 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
感谢您的回复,看来我对实际性能有误。