我有一些HTML文本文件,我想动态地包含在ASP.NET页面中。
这样做的最佳方式是什么?
我的第一个猜测是在页面上创建一个Literal控件并输出如下:
litMyLiteral.Text = System.IO.File.ReadAllText("c:\path\to\file.htm");
这是一个很好的解决方案,还是有更好的解决方案?对我来说,性能是主要目标,因为这些代码段文件在我的网站上的每个页面上输出,并且有很多流量。
由于
答案 0 :(得分: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 :(得分:1)
就性能而言,这将是一个非常糟糕的解决方案。如果性能受到关注,任何在每个请求上启动文件IO的东西都会在以后再次出现。一个更好的选择是创建一个缓存的字典,其中包含您要包含的所有文本文件的所有内容(假设它们没有太多,并且它们不是太大)并且存储所有内存中的内容,因此您不必在每个请求上打开文件。除此之外,文字控制方法并不是一个坏主意,可能是最简单的方法。