1. 程式人生 > >解決Webservice第一次訪問特別慢的問題

解決Webservice第一次訪問特別慢的問題

最近做一個專案遇到首次載入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、騷年啟動你的應用程式吧