ASPX CMS - 性能问题

时间:2009-11-09 10:35:46

标签: c# performance content-management-system asp.net

我正在编写一个网站(C#,ASP 3.5),同时实现一个简单的CMS。 在几个有限的地方 - 我允许网站管理员管理页面内容。

编辑内容由Edit控件完成 - 输出HTML存储在数据库中(SqlServer Express)。

每次页面加载时 - 我从数据库中读取页面HTML内容并在屏幕上打印。

至于现在(发展阶段),一切都很顺利。

但是,我有点害怕现实世界中的性能问题(过多的数据库调用?)。

我正在寻找缓存动态HTML页面的最佳解决方案: 假设页面内容不会经常更新,我应该:

  • 保持解决方案今天完成 - 在每个页面加载时调用数据库以获取动态页面内容(如果!IsPostBack)
  • 将页面内容存储在文件中并从磁盘中读取
  • 将页面内容存储在应用程序变量中。
  • 其他想法?

我认为页面内容,即HTML文本 - 不会太长。

由于

3 个答案:

答案 0 :(得分:0)

我会实现一个不涉及磁盘i / o的缓存策略。 例如,您可以下载Enterprise Library并执行以下操作:

ICacheManager cacheManager = CacheFactory.GetCacheManager();
object obj = cacheManager.GetData(YOUROWNCACHEKEY);

YourCMSContentType cmsContent = null;
if (obj == null) { cmsContent = ""; //get cms content from db here cacheManager.Add(YOUROWNCACHEKEY, cmsContent); } else { cmsContent = obj as YourCMSContentType; }
return cmsContent;

您需要参考:

  • Microsoft.Practices.EnterpriseLibrary.Caching

这些也需要在服务器上提供:

  • Microsoft.Practices.EnterpriseLibrary.Common.dll
  • Microsoft.Practices.ObjectBuilder2.dll
  • Microsoft.Practices.Unity.dll

编辑app.config或web.config,右键单击,单击编辑企业库配置,右键单击.config节点,添加缓存应用程序块。

此致

微米。

答案 1 :(得分:0)

使用页面上的OutputCache属性。

OutputCache on MSDN

超级易用,将其缓存为60分钟,然后在给定的一天中每页最多只能进行24次DB调用。

观看: How to use Output Cache video

答案 2 :(得分:0)

我不想发布否定回复或不提供答案,但在做任何事情或考虑缓存之前,您应该决定/解决这是否是性能问题。如果你从那些积极参与表演的人那里读到任何东西(Rico Mariani和他的博客就是一个很好的例子)那么你会看到通过测量实现这一目标的方法之一。

您每小时或每分钟会有多少次点击?数据库调用在生产服务器上需要多长时间?

有很多方法可以找到这个,一个简单的代码分析器(.NET自定义类 - 如果你需要详细信息,请给我发消息)可用于计时每个请求并将其输出到日志文件。也可以注销进行数据库调用所花费的时间。这可以让您了解单个请求的性能(假设分段硬件/环境与生产环境非常相似)。要在负载下测试它,您可以使用压力测试工具并模拟预期负载。这应该告诉你平均每秒请求服务时间。如果可以接受,您可能根本不需要任何缓存。很多时候可以在必要之前采用缓存。添加代码以使用企业库缓存功能将不必要地增加代码的复杂性。输出缓存也会引入微妙的问题,但在这种情况下,我同意答案,认为这是一个可行的解决方案。

从您所描述的内容来看,听起来并不像是会有太多的数据库命中,您会惊讶于某些网站的每次请求的点击量。至于你的第二点,我绝对不会考虑在测量之前重新设计性能应用程序。我假设您将内容存储在数据库中是有充分理由的,将其移动到磁盘上会带来其他开销和安全隐患。