我有一些我想动态包含在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的事情都会在以后再次出现。更好的办法是创建一个缓存的字典,它包含所有你想包含的文本文件的所有内容(假设它们不是太多并且不是太大)并且存储所有内存中的内容,因此您不必在每个请求中打开该文件。除此之外,字面控制方法并不是一个坏主意,而且可能是最简单的方法。