我有一些我想動態包含在ASP.NET頁面中的HTML文本文件。在ASP.NET頁面內嵌輸出文本文件內容
這樣做的最好方法是什麼?
我的第一個猜測是創建頁面上的文字控制和輸出如下:
litMyLiteral.Text = System.IO.File.ReadAllText("c:\path\to\file.htm");
這是一個很好的解決方案,或者是有一個更好的?對我而言,性能是主要目標,因爲這些代碼片段文件在我網站上的每個頁面上輸出,並且存在大量流量。
謝謝
我有一些我想動態包含在ASP.NET頁面中的HTML文本文件。在ASP.NET頁面內嵌輸出文本文件內容
這樣做的最好方法是什麼?
我的第一個猜測是創建頁面上的文字控制和輸出如下:
litMyLiteral.Text = System.IO.File.ReadAllText("c:\path\to\file.htm");
這是一個很好的解決方案,或者是有一個更好的?對我而言,性能是主要目標,因爲這些代碼片段文件在我網站上的每個頁面上輸出,並且存在大量流量。
謝謝
取決於你有多少文件或你需要多長時間閱讀它們,我建議動態加載到你需要它們的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;
}
}
}
您應該考慮緩存過期並查看哪些最適合您的數據。您還可以實施某種類型的最大檢查以允許最大數量的緩存文件,這樣如果過期很長,則內存足跡不會變大。你真的需要看看你的文件總數和大小,並找出最適合你需要的東西。
就性能而言,這將是一個非常糟糕的解決方案。如果性能是一個問題,任何在每個請求上啓動文件IO的事情都會在以後再次出現。更好的辦法是創建一個緩存的字典,它包含所有你想包含的文本文件的所有內容(假設它們不是太多並且不是太大)並且存儲所有內存中的內容,因此您不必在每個請求中打開該文件。除此之外,字面控制方法並不是一個壞主意,而且可能是最簡單的方法。