解決Webservice第一次訪問特別慢的問題
阿新 • • 發佈:2019-01-25
最近做一個專案遇到首次載入webservice的時候特別慢,於是Google一番,得到結果是
<system.net>
<defaultProxy enabled="false" useDefaultCredentials="false">
<proxy/>
<bypasslist/>
<module/>
</defaultProxy>
</system.net>
原理是:由於web代理預設是開啟的,也就是HttpWebRequest.DefaultWebProxy的值不為null,而這個DefaultWebProxy是一個全域性變數。故第一次呼叫webservice方法的時候只有等這個預設代理超時以後才能繞過,所以第一次比較慢。
然而這個方法還不是特別慢的最大原因,所以即使這麼做了效果依然沒有明顯的變快,於是又是一番的Google。
最終發現一個另一個因素:
原因很簡單,就是因為在第一次連線Webservice時,應用程式動態編譯生成序列化程式集導致的慢。
微軟官方的說明:
https://support.microsoft.com/zh-cn/kb/872800
問題知道了那麼就說說如何解決:
1、首先如何提前生成序列化程式集
這個時候你會發現你的bin目錄下回生成一個“***.XmlSerializers.dll”
2、接下來就簡單了,在程式啟動的時候就把這個檔案載入進來就OK了
Assembly.LoadFrom(Application.StartupPath + "\\***.XmlSerializers.dll");
/// <summary> /// 應用程式的主入口點。 /// </summary> [STAThread] static void Main() { bool ok; var m = new System.Threading.Mutex(true, "***.exe", out ok); if (!ok) return; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Assembly.LoadFrom(Application.StartupPath + "\\***.XmlSerializers.dll"); Application.Run(new FormMain()); GC.KeepAlive(m); }
3、騷年啟動你的應用程式吧