簡體   English   中英

HttpModule的性能是否與RAMMFAR一樣差?

[英]Does an HttpModule perform as badly as RAMMFAR?

我知道我們應該謹慎使用RAMMFAR(runAllManagedModulesForAllRequests),例如Hanselman帖子中的建議。 原因是它將所有請求發送到每個受管模塊。

但是我最近不得不創建一個HttpModule,我注意到它無論如何都會獲取所有請求(因為那是一個模塊的目的),現在我想知道設置RAMMFAR = true與僅使用托管對象之間是否存在任何性能差異。模塊,如果該模塊將要獲取所有請求。

換句話說,托管模塊是否被認為對性能有害? 如果我測試url並忽略了我不關心的請求,那會不會損害我的可擴展性?

編輯 :通過所有請求,我的意思是我看到對靜態內容的請求,例如磁盤上的css,js和jpg文件。

編輯 :該模塊是這樣注冊的:

<modules>
  <add name="MyModule" type="MyNamespace.MyModule, MyAssembly"/>
</modules>

您的帖子中有幾個問題。 我將嘗試單獨解決它們。

具有虛擬(無操作)受管模塊是否會影響性能/吞吐量?

是的,從IIS和ASP.NET需要協調本機<->托管代碼轉換的角度來看,這種轉換會產生一些開銷。 對於絕大多數應用程序而言,實際的應用程序邏輯使這種開銷顯得微不足道。 傾向於在配置文件中顯示的應用程序類型是每秒處理數萬或數十萬個請求的站點。 在這一點上,我們通常建議非常注意應用程序中包含哪些模塊,並盡可能縮小它們的尺寸。

為什么我的模塊運行靜態文件?

因為您在模塊上沒有ManagedHandler前提條件。 如果模塊聲明中存在此前提條件,則只有在請求針對托管端點(.aspx,.axd,無擴展名等)的情況下,該模塊才會運行。 如果不存在此前提條件,則模塊始終運行。

要指定managedHandler前提條件:

<modules>
  <add name="..." type="..." preCondition="managedHandler" />
</modules>

注意:如果您使用的是IIS 7.0或7.5,則可能需要安裝修補程序http://support.microsoft.com/kb/980368,以使IIS將無擴展名的URL視為“托管”端點。

RAMMFAR實際做什么?

簡而言之,它忽略了模塊注冊中指定的前提條件。 它的名稱含義是:即使所有請求都不是針對托管端點的,它也會為所有請求運行所有managedHandler模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM