2012-05-10 50 views
0

我有一個大的txt文件塔爾我想在我的Web應用程序來解析。之前,我有一種桌面應用程序的相同應用程序,並且在加載過程中我執行了一次解析,並將文件的內容放入內存中。
凡解析一個大的txt文件ASP.NET

在ASP.NET網站中,我不確定是否應該在Page_Load()中執行此操作,因爲解析13Mb文本文件會使用戶每次都慢。我應該怎麼做才能將這一次帶入內存,然後對所有用戶來說,可以查找相同的內存中解析的內容?

+0

什麼是txt文件格式?它是XML,逗號分隔,製表符分隔嗎?解析txt文件後,可以將其放置在應用級高速緩存,以允許訪問所有ASPX – rt2800

回答

2

如果你的文件是相同的所有,你可以把由asp.net提供的緩存的用戶。如果它對用戶是特定的,那麼會話可能會成爲一個地方,但會獲得大量內存並使其幾乎具有破壞性。這是如何可以Cache file in asp.net

string fileContent = Cache["SampleFile"] as string; 
if (string.IsNullOrEmpty(fileContent)) 
{ 
    using (StreamReader sr = File.OpenText(Server.MapPath("~/SampleFile.txt"))) 
    { 
     fileContent = sr.ReadToEnd(); 
     Cache.Insert("SampleFile", fileContent, new System.Web.Caching.CacheDependency(Server.MapPath("~/SampleFile.txt"))); 
    } 
} 
4

我會在Application_Start事件處理程序中將它加載到global.asax中。然後將其添加到緩存並根據需要進行檢索。

要降低你的數據的可能性從緩存中刪除,你可以指定它是不可拆卸:

HttpContext.Current.Cache.Add(
    "mydatakey",  // key for retrieval 
    MyDataObject,  
    null,    // cache dependencies 
    DateTime.Now.AddDays(1),  // absolute expiration 
    TimeSpan.FromDays(1),   // sliding expiration 
    System.Web.Caching.CacheItemPriority.NotRemovable,  // priority 
    new CacheItemRemovedCallback(MyHandleRemovedCallback) 
); 

更多細節該緩存方法的數據,在這裏看到的MSDN(緩存應用程序數據) :http://msdn.microsoft.com/en-us/library/6hbbsfk6(v=vs.71).aspx

+0

頁面,你可以把更多的詳細介紹將它放在緩存或點到點鏈接,我可以看看如何做到這一點?謝謝 – user1372448

+0

'應用程序[「MyKey」] = MyValue'。 –

+0

@ user1372448添加了一些關於緩存的更多細節。你可以使用UweKeim的建議;唯一的潛在問題就是您的服務器可能會決定從您的緩存中更多地轉儲數據。 – McGarnagle

0

那麼,如果你必須,那麼我會建議你使用,你可以在Global.asax文件中設置此應用程序變量加載一個13 MB的文本文件到內存中的一個網站,這將是可供網站內的所有用戶使用。

一旦文件是存在的,將一直保持到應用程序池從內存中卸載。

0

使用應用程序[ 「鍵」] =值。你需要將它緩存在服務器中,應用程序應該像Session一樣保存事物[「userid」] = something。