【问题标题】:ASPX CMS - performance issuesASPX CMS - 性能问题
【发布时间】:2009-11-09 10:35:46
【问题描述】:

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

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

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

就目前(开发阶段)而言,一切正常且顺利。

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

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

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

    从您所描述的情况来看,您似乎不会进行太多的数据库点击,但您会对某些网站每次请求的点击量感到惊讶。至于您的第二点,在进行测量之前,我绝对不会考虑重新设计应用程序以提高性能。我假设您出于充分的理由将内容存储在数据库中,将其移动到磁盘会带来其他开销和安全隐患。

    【讨论】:

    • 在这种情况下,每页只有一两个数据库调用来检索 CMS 文本,我同意不需要实现缓存机制。
    【解决方案2】:

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

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

    YourCMSContentType cmsContent = null;
    如果(obj == null) { cms内容 = ""; //从这里的db获取cms内容 cacheManager.Add(YOUROWNCACHEKEY, cmsContent); } 别的 { cmsContent = obj 作为 YourCMSContentType; }
    返回 cms 内容;

    您需要参考:

    • Microsoft.Practices.EnterpriseLibrary.Caching

    这些也需要在服务器上可用:

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

    编辑你的app.config或者web.config,右键,点击Edit Enterprise Library Configuration,右键.config节点,添加Caching Application Block。

    问候,

    M.

    【讨论】:

      【解决方案3】:

      在您的页面上使用 OutputCache 属性。

      OutputCache on MSDN

      超级容易做到,将其缓存 60 分钟,然后在给定的一天内,每页最多只能调用 24 次数据库。

      观看: How to use Output Cache video

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-13
        • 2022-01-04
        相关资源
        最近更新 更多