由於舊的ISAPI過濾器遲早會死亡,我想將IIS 6中使用的舊ISAPI過濾器重寫爲用於IIS 7的模塊。該模塊將在全局範圍內使用,這意味着它將會在安裝了IIS 7.5的Windows Server 2008 R2上的每個站點中使用,它將承載數千個網站並管理大約50個應用程序池。
我現在的問題是,如果我應該在託管或非託管代碼中編寫該模塊?我關心託管代碼的一個問題是由於.NET框架開銷導致的大量內存消耗。我不知道這將如何影響服務器的性能。
我已經在託管以及非託管代碼中編寫了模塊。所以這不是困擾我的決定。但如果沒有巨大的缺點,我寧願用C#編寫模塊。
關於這個問題的任何建議?IIS7模塊 - 託管還是本機?
3
A
回答
5
裏克斯特拉爾offered sound advice關於這個話題,我在learn.iis.net的文章中曾多次重複過。
瞭解使用所有這些能力做錯事情的可能性也很重要。首先請記住,託管代碼比Web服務器中的本機代碼慢。通過將託管代碼引入核心服務器,您會降低Web服務器的性能。具體而言,當在集成模式下運行並且存在託管模塊時,託管代碼與非託管代碼之間的上下文切換是昂貴的。我已經和一些微軟的開發者談過了,他們正在努力研究如何通過儘可能多的批量調用託管代碼組件來優化這些上下文切換,並儘可能地保留託管代碼。
默認情況下託管代碼是可選的 - 所有核心模塊都是本機代碼,因此添加託管模塊是您必須做出的明確決定。 如果您已經在使用ASP.NET,那麼這個決定可能是一件容易的事。但是,如果您今天運行的是原始ISAPI擴展或模塊,那麼您可能需要花很長時間仔細查看託管代碼是否會很好地適應性能。
簡而言之,如果所有應用程序都是ASP.NET,那麼爲IIS編寫託管模塊應該很少或根本沒有開銷 - 這是一個簡單的選擇。然而,如果網站將而不是否則將加載CLR,那麼這樣做是爲了執行你的模塊將是昂貴的,你會仔細考慮(測量!)的影響,以確定是否性能受到影響值得開發時間生產力的提升。
1
取決於。
如果您可以保留所有管理的應用程序,請進行管理。這允許一個純粹的託管堆棧。我會努力的;)
關於記憶 - 忘記它。認真。管理IIS 7核心,根據需要掛接傳統堆棧。所以,你已經有.NET了,不管你喜不喜歡。此外,現代服務器有相當多的memroy - 即使池運行32位(強烈推薦),仍然有50池;)服務器沒有64mb RAM;)
相關問題
- 1. 要託管還是不託管?
- 2. 此DLL是管理還是非託管?
- 3. IIS7本地模塊問題
- 4. 開發IIS7模塊
- 5. 如何在iis7中託管?
- 6. 網站日誌(IIS7,託管)
- 7. 在IIS7上託管Mercurial
- 8. FileStream是託管還是非託管代碼?
- 9. Unity遊戲對象是託管還是非託管資源?
- 10. 託管代碼是指JIT還是GC?
- 11. IIS7的SPDY模塊
- 12. IIS託管的Web服務方法調用隨機模塊
- 13. 在IIS7中託管WCF服務
- 14. 增加iis7上託管的WCF超時
- 15. 使用IIS7託管ASP.NET網站Windows 7
- 16. 在IIS7上託管學生項目雲
- 17. 在IIS7(WF4.0)中託管WCF WF
- 18. 託管powershell導入模塊失敗
- 19. 託管Http模塊的配置文件
- 20. 託管模塊和平臺獨立
- 21. IronPython託管緩存導入模塊?
- 22. 接口託管C#out變量非託管,本機C++
- 23. 本機C++託管C++到C#
- 24. 本機C /託管C++調試
- 25. 從託管代碼調用本機API
- 26. TemplateDoesNotExist在託管在本地主機
- 27. 在混合C++ .NET應用程序中強調託管還是非託管?
- 28. maven是按模塊執行模塊還是按階段執行
- 29. 是否有可能確定託管管道IIS7在ASP.NET中運行?
- 30. IIS7找不到X.509證書,儘管自託管WCF可以
池正在運行32位... – 2010-03-16 13:44:12
對不起,但是這個說法完全是錯誤的:「IIS 7核心管理,根據需要掛鉤在傳統堆棧中。」 恰好相反 - IIS 7核心是本機的,並根據需要提取CLR。改變之處在於,它現在將託管代碼直接集成到管道中,但只有在加載託管處理程序時纔會執行。 – hemp 2010-10-08 18:05:54