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

相关问题