0

我有一个大的 txt 文件,我想在我的 Web 应用程序中解析。早些时候,我有一个与桌面应用程序相同的应用程序,并且我在加载期间进行了一次解析,并将文件的内容放入内存中。

在 ASP.NET 网站中,我不确定是否应该在 Page_Load() 中执行此操作,因为解析 13Mb 文本文件会使用户每次都变慢。我应该怎么做才能将它一次带入内存,然后对于所有用户,可以查找相同的内存中解析的内容?

4

4 回答 4

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

于 2012-05-10T05:43:17.357 回答
2

如果所有用户的文件都相同,则可以将其放入 asp.net 提供的缓存中。如果它是特定于用户的,那么会话可能是它的一个地方,但这将获得大量内存并使其几乎具有破坏性。这是您可以在 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")));
   }
}   
于 2012-05-10T05:45:01.537 回答
0

好吧,如果您必须将 13 mb 的文本文件加载到网站的内存中,那么我建议您使用应用程序变量,您可以在 Global.asax 文件中设置它,这将可供网站内的所有用户使用。

一旦文件在那里,它将一直存在,直到应用程序池从内存中卸载。

于 2012-05-10T05:45:41.567 回答
0

使用 Application["key"] = value。您需要将其缓存在服务器中,并且应用程序应该这样做,就像在 Session 中保存东西一样,例如 Session["userid"] = something。

于 2012-05-10T06:22:42.107 回答