我有一个大的 txt 文件,我想在我的 Web 应用程序中解析。早些时候,我有一个与桌面应用程序相同的应用程序,并且我在加载期间进行了一次解析,并将文件的内容放入内存中。
在 ASP.NET 网站中,我不确定是否应该在 Page_Load() 中执行此操作,因为解析 13Mb 文本文件会使用户每次都变慢。我应该怎么做才能将它一次带入内存,然后对于所有用户,可以查找相同的内存中解析的内容?
我会将它加载到 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
如果所有用户的文件都相同,则可以将其放入 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")));
}
}
好吧,如果您必须将 13 mb 的文本文件加载到网站的内存中,那么我建议您使用应用程序变量,您可以在 Global.asax 文件中设置它,这将可供网站内的所有用户使用。
一旦文件在那里,它将一直存在,直到应用程序池从内存中卸载。
使用 Application["key"] = value。您需要将其缓存在服务器中,并且应用程序应该这样做,就像在 Session 中保存东西一样,例如 Session["userid"] = something。