[英]How to prevent OnDemandConnRouteHelper.dll from being loaded and unloaded every http request?
調用IServerXmlHttpRequest.Open
:
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 |
如您所見,此偏移使我的 http 請求增加了10.462 ms
。
當整個請求為~30 ms時,每次額外加載和卸載一個dll會增加50%的操作次數。
並將我的吞吐量從 50 個請求/秒減少到 33 個請求/秒。
換句話說:我想要我的 50% 返還——我如何獲得它?
我不知道這個 dll 是做什么的,但唯一有用的 function 被記錄為:
OnDemandGetRoutingHint function 在路由請求緩存中查找目標,如果找到匹配項,則返回相應的接口 ID。
這聽起來很有趣。 但是,如果您立即卸載 dll,您將丟棄緩存 - 從而破壞緩存的任何用處。
這不是答案,但解決方法是手動加載一次庫。
在 Windows 中不需要在程序退出前卸載 DLL - 當進程被 Windows 拆除時,DLL 將被卸載。
所以調用沒有壞處:
LoadLibrary('OnDemandConnRouteHelper');
事實上,多次調用它並沒有什么壞處。
只是不要調用UnloadLibrary
; 因為那時它必須再次加載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.