解决Webservice第一次访问特别慢的问题
发布时间:2020-12-16 22:04:28 所属栏目:安全 来源:网络整理
导读:最近做一个项目遇到首次加载webservice的时候特别慢,于是Google一番,得到结果是 system.net defaultProxy enabled="false" useDefaultCredentials="false" proxy/ bypasslist/ module/ /defaultProxy /system.net 原理是:由于web代理默认是开启的,也就是
最近做一个项目遇到首次加载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、骚年启动你的应用程序吧 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |