当前位置 : 主页 > 网页制作 > Nodejs >

解决Webservice第一次访问特别慢的问题

来源:互联网 收集:自由互联 发布时间:2021-06-24
最近做一个项目遇到首次加载webservice的时候特别慢,于是Google一番,得到结果是 system.net defaultProxy enabled="false" useDefaultCredentials="false" proxy/ bypasslist/ module/ /defaultProxy /system.net 原理是:

最近做一个项目遇到首次加载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、骚年启动你的应用程序吧

网友评论