我想在我的网络应用程序中解析一个大的txt文件。之前,我和一种桌面应用程序有相同的应用程序,我在Load期间进行了一次解析,并将文件内容添加到内存中。
在ASP.NET网站中,我不确定是否应该在Page_Load()中执行此操作,因为解析13Mb文本文件会使用户每次都变慢。我应该怎么做才能将这一次带入内存,然后对所有用户,可以查找相同的内存中解析内容?
答案 0 :(得分: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
答案 1 :(得分: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")));
}
}
答案 2 :(得分:0)
如果您必须将13 MB的文本文件加载到网站的内存中,那么我建议您使用可以在Global.asax文件中设置的应用程序变量,这将对网站中的所有用户可用。< / p>
一旦文件存在,它将一直保留,直到从内存中卸载应用程序池。
答案 3 :(得分:0)
使用Application [“key”] = value。你需要在服务器中缓存它,应用程序应该像在Session [“userid”] = something中那样在Session中保存。