2009-08-22 15 views
1

ASP.NETページに動的に含めるHTMLテキストファイルがあります。ASP.NETページでテキストファイルの内容をインラインで出力する

これを行うにはどのような方法が最適ですか?

litMyLiteral.Text = System.IO.File.ReadAllText("c:\path\to\file.htm"); 

は、これは良い解決策である、またはより良いものがある:

私の最初の推測では、次のようにページおよび出力にLiteralコントロールを作成することでしたか?これらのスニペットファイルはサイトのすべてのページに出力され、多くのトラフィックが存在するため、私にとってパフォーマンスは主な目標です。

ありがとうございました

答えて

2

あなたが持っているファイルの数や読んでいる頻度によっては、asp.netキャッシュASに動的にロードすることと、ある種の有効期限やキャッシュを持つことをお勧めします。

ファイルアクセスとキャッシングimplementatonをラップするためのいくつかのタイプのクラスを作成します。このコードはおそらく動作しますが、それをそのまま使用することはありません。私が話していることのアイデアを伝えるだけです。改善のためのすべてのコメントはありません。

public static class StaticFiles 
{ 
    public static string GetFile(string file) 
    { 
     // Note filename is the key 
     if (Cache[file] != null) 
     { 
      // Return the cached data, this will be fast. 
      return Cache[file].ToString(); 
     } 
     else 
     { 
      // Make sure you do some exception checking/validation here for the 
      // file data and don't hard code the path and make it relative assuming 
      // it is in your application directory 

      // Do you file access and store it with some type of expiry 
      string output = System.IO.File.ReadAllText(string.Format("c:\path\to\{0}", file)); 
      Cache[file] = output; 
      return output; 
     } 
    } 
} 

キャッシュが期限切れであるとみなし、データに最も適したものを確認してください。いくつかのタイプのmaxチェックを実装して、キャッシュされたファイルの最大数を許可して、有効期限が長い場合はメモリの足跡が大きくならないようにすることもできます。あなたは本当にファイルの総数とそのサイズを見て、あなたのニーズに最も適したものを見つけ出す必要があります。

1

これはパフォーマンスが向上する限り非常に悪い解決策になります。 1回のリクエストごとにファイルIOを開始するものは、パフォーマンスが懸念される場合には、後で復旧する予定です。はるかに良い賭けは、あなたが含めることを望むすべてのテキストファイルのすべての内容を含むキャッシュされた辞書を作成することです(それらのうち過度にはなく、過度に巨大ではないと仮定して)メモリ内の内容はすべての要求でファイルを開く必要はありません。それ以外のリテラル制御アプローチは悪い考えではなく、おそらく最も簡単なアプローチです。

関連する問題