2008-11-10 39 views
2

我們正在構建一個自定義HttpModule的文本模板引擎,它將HTML中的標籤替換爲XML文件中的全部文本。ASP.NET模板

當前,XML文件作爲字符串/字符串字典被加載到內存中,以便使用正則表達式可以非常快速地執行由HttpModule完成的查找/替換。

我們希望擴大這個用途,以便合併更大和更大的替換文本部分,並且我擔心在字典中一次保留內存中更詳細的文本,特別是當我們使用ASP用於許多用途的.NET緩存也是如此。

有人對我們可以使用的更高效和可擴展的數據結構/管理策略有什麼建議嗎?

UPDATE:針對Corbin March的下面的偉大建議,我不認爲這是我們走下「黑暗之路」(儘管我很欣賞這種擔憂)的情況。我們的應用程序旨在爲不同的客戶完全重塑,直至頁面上任何地方的文本 - 包括具有多種語言的能力。我所描述的技術已被證明是處理這一問題的最靈活的方法。

回答

3

您正在使用的內存量將與文件大小大致相同。 XML在Dictionary中不會有一些標籤開銷,所以這是對內存需求的安全估計。那麼你說的是10-50 MB還是100-500 MB?我不一定會擔心10到50 MB。

如果您擔心,那麼您需要考慮是否確實需要在每次加載頁面時都進行替換。你可以在每頁打一個數據庫或XML文件一次,然後緩存ASP.NET頁面的輸出並保持一小時嗎?如果是這樣,請考慮使用Page Caching

2

一對夫婦的想法:

壓縮你的字典值。看看Scott Hanselman的cache compressing article,以獲得鍛鍊的精神。如果你的字典鍵很大,考慮壓縮這些。

只有在請求時纔會將XML文件中的項目加載到內存中並附加項目過期。如果到期沒有其他請求,則卸載該項目。這個想法是,一些字典項目使用的頻率較低,因此對不頻繁項目的IO命中是可以接受的。顯然,ASP.NET緩存爲你做了這些 - 我假設你在處理輸出時緩存不在上下文中。

只是一個意見......但我的蜘蛛警告我,你可能會走在黑暗的道路上。 ASP.NET的很大一部分是模板功能 - 主頁面,頁面模板,用戶控件,自定義控件,模板化控件,用於國際化的資源方案。如果可能的話,我會試着用這些工具解決你的問題,而不是使用文本處理的HttpModule。