2009-08-22 70 views
1

我有一些我想動態包含在ASP.NET頁面中的HTML文本文件。在ASP.NET頁面內嵌輸出文本文件內容

這樣做的最好方法是什麼?

我的第一個猜測是創建頁面上的文字控制和輸出如下:

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

這是一個很好的解決方案,或者是有一個更好的?對我而言,性能是主要目標,因爲這些代碼片段文件在我網站上的每個頁面上輸出,並且存在大量流量。

謝謝

回答

2

取決於你有多少文件或你需要多長時間閱讀它們,我建議動態加載到你需要它們的asp.net緩存AS,並有某種類型的過期或緩存。

寫一些類來包裝你的文件訪問和緩存工具。這段代碼很可能會起作用,但不要按原樣使用它,只是爲了讓你知道我在說什麼。請不要對所有改進的意見。

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; 
     } 
    } 
} 

您應該考慮緩存過期並查看哪些最適合您的數據。您還可以實施某種類型的最大檢查以允許最大數量的緩存文件,這樣如果過期很長,則內存足跡不會變大。你真的需要看看你的文件總數和大小,並找出最適合你需要的東西。

1

就性能而言,這將是一個非常糟糕的解決方案。如果性能是一個問題,任何在每個請求上啓動文件IO的事情都會在以後再次出現。更好的辦法是創建一個緩存的字典,它包含所有你想包含的文本文件的所有內容(假設它們不是太多並且不是太大)並且存儲所有內存中的內容,因此您不必在每個請求中打開該文件。除此之外,字面控制方法並不是一個壞主意,而且可能是最簡單的方法。

相關問題