在ASP.NET页面中内联输出文本文件内容

时间:2009-08-22 15:54:27

标签: asp.net file include .net

我有一些HTML文本文件,我想动态地包含在ASP.NET页面中。

这样做的最佳方式是什么?

我的第一个猜测是在页面上创建一个Literal控件并输出如下:

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

这是一个很好的解决方案,还是有更好的解决方案?对我来说,性能是主要目标,因为这些代码段文件在我的网站上的每个页面上输出,并且有很多流量。

由于

2 个答案:

答案 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的东西都会在以后再次出现。一个更好的选择是创建一个缓存的字典,其中包含您要包含的所有文本文件的所有内容(假设它们没有太多,并且它们不是太大)并且存储所有内存中的内容,因此您不必在每个请求上打开文件。除此之外,文字控制方法并不是一个坏主意,可能是最简单的方法。