上周五,經過不懈努力,終於將網站升級上去了。升級完成以後都凌晨四點多了。本以為總可以支持幾天沒問題吧。沒想到今天早上技術總監就來電話說,w3p.exe頻繁回收,網站訪問很慢。沒辦法,還是回公司找找原因吧。
回到公司後,和開發經理一起通過單頁面壓力測試終於發現可能是由於新加的webservice異步回調的方法有問題。經常出現數據綁定失敗的錯誤,差不多3分多鐘就會有一次綁定失敗。頻繁的應用程序出錯,極大的占用了服務器資源。
將異步回調的方法改掉後,重新發布,再進行測試。發現沒有再發生類似的錯誤,而且網站的頁面訪問速度也快了不少。
經過開發經理的分析,引起這次問題的主要原因就是因為異步回調的方法引起的。具體原因還有待我們繼續研究。
通過查看相關的參考資料得知。同步和異步的方式有個區別: 主線程和後台線程. 主線程和UI有關,用來刷新頁面和綁定數據。而異步調用的是後台線程,它無法刷新頁面和數據源。 如果要做到異步綁定的功能的話,得控制線程。
引起我們遇到的上述問題的主要原因在於:
用於應用程序的後台線程並不直接與應用程序 UI 交互,這一點相當關鍵。如果後台線程試圖修改應用程序的 UI 中的控件,該控件就可能會處於一種未知的狀態。這可能會在應用程序中引起較大的問題,並難於診斷。例如,當另一個線程正在給動態生成的位圖傳送新數據時,它或許不能顯示。或者,當數據集正在刷新時,綁定到數據集的組件可能會顯示沖突信息。
更多的參考可以查看:
http://www.microsoft.com/china/msdn/library/architecture/architecture/architecturetopic/SCArchDeGuide/Chapter6UsingMultThr.mspx?mfr=true