如何防止每个http请求都加载和卸载OnDemandConnRouteHelper.dll?
How to prevent OnDemandConnRouteHelper.dll from being loaded and unloaded every http request?
var http = (IServerXMLHTTPRequest2) new CreateComObject(CLASS_ServerXMLHTTP60);
http.Open("GET", "https://thepiratebay.org/description.php?id=54783221", false, "mhalifa", "hunter2");
导致每次加载和卸载库OnDemandConnRouteHelper.dll:
| Time | Operation | Path | Result |
|--------------------|---------------------------|-------------------------------------------------|-------------------------------|
| 3:08:29.0705523 PM | CreateFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0705941 PM | QueryBasicInformationFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0706149 PM | CloseFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0708557 PM | CreateFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0709287 PM | CreateFileMapping | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | FILE LOCKED WITH ONLY READERS |
| 3:08:29.0712518 PM | CreateFileMapping | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0714096 PM | Load Image | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0714328 PM | QueryNameInformationFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0717643 PM | CreateFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0807774 PM | CloseFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0810143 PM | QueryNameInformationFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
如您所见,这次旅行将 10.462 ms
添加到我的 http 请求中。
当整个请求是~30毫秒时,每次额外加载和卸载一个dll增加了50次操作%.
并将我的吞吐量从 50 requests/sec 减少到 33 requests/sec。
问题的动机已经足够了,继续提问
- 什么是OnDemandConnRouteHelper.dll
- 我可以做些什么来满足我的要求而不需要帮助吗?
- 我可以要求 ServerXMLHTTPRequest 对象不使用助手吗?
- 我可以说服 ServerXMLHTTPRequest 将 dll 永远加载到我的进程中吗?
换句话说:我想要返还我的 50% - 我该如何获得?
Conn 路由助手
我不知道这个 dll 是做什么的,但唯一有用的功能记录在:
The OnDemandGetRoutingHint function looks up a destination in the Route Request cache and, if a match is found, return the corresponding Interface ID.
这听起来很有趣。但是,如果您立即卸载 dll,就会丢弃缓存 - 从而破坏缓存的任何用处。
这不是答案,但解决方法是手动加载一次库。
在 Windows 中不需要在程序退出前卸载 DLL - 当进程被 Windows 拆除时将卸载 DLL。
所以调用没有坏处:
LoadLibrary('OnDemandConnRouteHelper');
其实多次调用也没什么坏处
只是不要打电话 UnloadLibrary
;因为那时它必须重新加载。
var http = (IServerXMLHTTPRequest2) new CreateComObject(CLASS_ServerXMLHTTP60);
http.Open("GET", "https://thepiratebay.org/description.php?id=54783221", false, "mhalifa", "hunter2");
导致每次加载和卸载库OnDemandConnRouteHelper.dll:
| Time | Operation | Path | Result |
|--------------------|---------------------------|-------------------------------------------------|-------------------------------|
| 3:08:29.0705523 PM | CreateFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0705941 PM | QueryBasicInformationFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0706149 PM | CloseFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0708557 PM | CreateFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0709287 PM | CreateFileMapping | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | FILE LOCKED WITH ONLY READERS |
| 3:08:29.0712518 PM | CreateFileMapping | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0714096 PM | Load Image | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0714328 PM | QueryNameInformationFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0717643 PM | CreateFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0807774 PM | CloseFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
| 3:08:29.0810143 PM | QueryNameInformationFile | C:\WINDOWS\SysWOW64\OnDemandConnRouteHelper.dll | SUCCESS |
如您所见,这次旅行将 10.462 ms
添加到我的 http 请求中。
当整个请求是~30毫秒时,每次额外加载和卸载一个dll增加了50次操作%.
并将我的吞吐量从 50 requests/sec 减少到 33 requests/sec。
问题的动机已经足够了,继续提问
- 什么是OnDemandConnRouteHelper.dll
- 我可以做些什么来满足我的要求而不需要帮助吗?
- 我可以要求 ServerXMLHTTPRequest 对象不使用助手吗?
- 我可以说服 ServerXMLHTTPRequest 将 dll 永远加载到我的进程中吗?
换句话说:我想要返还我的 50% - 我该如何获得?
Conn 路由助手
我不知道这个 dll 是做什么的,但唯一有用的功能记录在:
The OnDemandGetRoutingHint function looks up a destination in the Route Request cache and, if a match is found, return the corresponding Interface ID.
这听起来很有趣。但是,如果您立即卸载 dll,就会丢弃缓存 - 从而破坏缓存的任何用处。
这不是答案,但解决方法是手动加载一次库。
在 Windows 中不需要在程序退出前卸载 DLL - 当进程被 Windows 拆除时将卸载 DLL。
所以调用没有坏处:
LoadLibrary('OnDemandConnRouteHelper');
其实多次调用也没什么坏处
只是不要打电话 UnloadLibrary
;因为那时它必须重新加载。