我最近在Silverlight 5.異步/等待性能5
進行一些測試以關於異步/ AWAIT(asyncctp)功能被用於這兩個測試下列硬件:
- 英特爾SNB2.3克
- 8克DDR
- 的Windows 7 - 64位
- 的Silverlight 5
- SQL服務器2008 - R2
測試邏輯如下:
沒有異步/ AWAIT:
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();** }; }
隨着異步/ AWAIT:
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
我很好奇,爲什麼,以及如何使用異步/ AWAIT會提高我的Silverlight應用程序到這種程度顯著。如果我的測試「不公平」,請給我一些關於如何改進的評論。
我已將「str」值綁定到UI,而不使用調試模式。這些託管在IIS中並在IE9中執行。
的resuls如下:
蜱爲1:5504010個
蜱2:5680325
感謝您的答覆,看來我作出關於實際性能是錯誤的。
您確定您的其他更改沒有效果嗎? – Jodrell
這兩個樣本都稱爲用於查詢同一個表的相同ria服務。我還單獨運行了測試並關閉了其他應用程序。我已經在我大學的計算機上嘗試過,並獲得幾乎相同的結果。 – justin
他們是否都得到相同的實際結果?請注意,您實際上並不*使用'str'做任何事情 - 所以您是如何觀察效果的?如果你在調試器中運行它,這很容易產生巨大的影響。在調試器外運行*,記錄效果。 –