2012-05-10 6 views
0

私はWebアプリケーションで解析したい大きなtxtファイルを持っています。以前は、一種のデスクトップアプリケーションと同じアプリケーションを使用していましたが、読み込み中に一度解析を行い、ファイルの内容をメモリに保存しました。
大きなtxtファイルを解析する場所ASP.NET

ここでASP.NETのWebサイトでは、13Mbのテキストファイルを解析すると毎回この速度が遅くなるので、Page_Load()でこれを実行する必要があるかどうかはわかりません。これを1回だけメモリに保存してから、すべてのユーザーに対して同じメモリ内の解析済みコンテンツを検索するにはどうすればよいですか?

+0

txtファイルの形式は何ですか? XML、コンマ区切り、タブ区切りですか? txtファイルを解析した後、アプリケーションレベルのキャッシュに置いて、すべてのASPXページにアクセスできるようにすることができます。 – rt2800

答えて

2

ファイルがすべてのユーザーに対して同じ場合は、asp.netによって提供されるキャッシュに入れることができます。それがユーザーに固有のものなら、セッションはそれのための場所かもしれませんが、それは多くのメモリを獲得し、それをほとんど壊滅させるでしょう。これは、あなたが私はあなたがGlobal.asaxファイルでこれを設定することができ、アプリケーション変数を使用することをお勧めしウェブサイトのためにメモリに13メガバイトのテキストファイルをロードする必要がある場合は、これがものになるかどうかのことができます。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

まあですサイト内のすべてのユーザーが利用できます。

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

0

Application ["key"] = valueを使用します。これをサーバーにキャッシュする必要があります。アプリケーションはSession ["userid"] =何かのようなものをSessionに保存するのと同じように行うべきです。

関連する問題