0

Web アプリケーションで解析したい大きな txt ファイルがあります。以前、一種のデスクトップ アプリケーションと同じアプリケーションがあり、読み込み中に 1 回解析を行い、ファイルの内容をメモリに取り込みました。

ここASP.NET Webサイトでは、13Mbのテキストファイルを解析すると毎回ユーザーにとってこれが遅くなるため、Page_Load()でこれを行う必要があるかどうかわかりません。これを 1 回メモリに取り込むにはどうすればよいでしょうか。その後、すべてのユーザーに対して、メモリ内で解析された同じコンテンツを検索できますか?

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

Application["key"] = value を使用します。これをサーバーにキャッシュする必要があり、アプリケーションは Session["userid"] = something のようにセッションに保存するようにする必要があります。

于 2012-05-10T06:22:42.107 に答える
0

Web サイト用に 13 MB のテキスト ファイルをメモリにロードする必要がある場合は、Global.asax ファイルで設定できる Application 変数を使用することをお勧めします。これは、サイト内のすべてのユーザーが利用できるようになります。

ファイルがそこにあると、アプリケーション プールがメモリからアンロードされるまで残ります。

于 2012-05-10T05:45:41.567 に答える