【问题标题】:Can I improve performance by refactoring SQL commands into C# classes?我可以通过将 SQL 命令重构为 C# 类来提高性能吗?
【发布时间】:2010-05-10 20:21:08
【问题描述】:

目前,我的整个网站都从 SQL 参数化查询进行更新。它有效,我们没有遇到任何问题,但它有时会很慢。

我想知道将这些 SQL 命令中的一些重构到类中是否有意义,这样我们就不必如此频繁地访问数据库。我知道访问数据库通常是任何 Web 应用程序中最慢的部分。例如,假设我们有这样的类结构:

项目(包括)任务(包括)分配

Project、Task 和 Assignment 是类。

在站点的某些点上,您一次只处理一个项目,因此创建一个 Project 类并在页面之间传递它(使用 Session、Profile 等)可能是有意义的。我想这个类会有一个 Save() 方法来保存值的变化。

花时间做这件事有意义吗?在什么条件下才值得?

【问题讨论】:

  • 在站点的某个点只从事 1 个项目是什么意思?
  • @Yogendra "Project" 是我网站中的一个特殊术语。 “项目”是一组任务。我的意思是,网站中的某些页面一次只能处理一个项目,例如,您可以在其中编辑项目中的任务的页面。

标签: c# asp.net sql performance refactoring


【解决方案1】:

如果您的网站速度很慢,您需要在随机开始优化之前找出瓶颈所在。

缓存当然是个好主意,但你不应该认为这会解决问题。

【讨论】:

    【解决方案2】:

    缓存在 ASP .NET 应用程序中几乎总是未被充分利用。每次访问数据库时,都应该寻找缓存结果的方法。

    【讨论】:

      【解决方案3】:

      将对象序列化到会话中本身可能代价高昂,但最可能比每次都访问数据库要快。您现在受益于 SQL Server 中的执行计划缓存,因此您很可能获得的是存储过程的最佳性能。

      您可能考虑采取的提高性能的一个选项是通过 LINQ to SQL(针对您的存储过程)将您的数据提取到对象中,然后使用 AppFabric 缓存这些对象。

      http://msdn.microsoft.com/en-us/windowsserver/ee695849.aspx

      至于您的更新,您应该直接针对存储过程执行此操作,但您还需要清除 AppFabric 中受插入/更新/删除影响的对象的缓存。

      您也可以简单地使用标准缓存来做同样的事情,但 AppFabric 有一些额外的好处。

      【讨论】:

        【解决方案4】:

        使用 SQL Profiler 识别最慢的查询,看看是否可以通过一些简单的索引更改(删除未使用的索引、添加缺失的索引)来改进它们。

        您可以非常轻松地将应用程序性能提高一个数量级,而无需更改前端应用程序。

        http://sqlserverpedia.com/wiki/Find_Missing_Indexes

        【讨论】:

          【解决方案5】:

          如果您只有查找数据,您可以将其存储在 Cache 对象中。这将避免对 DB 的命中。只有可以全局使用的数据才应该存储在缓存中。 如果这个数据需要过滤,可以从Cache中恢复,在渲染前过滤数据。

          Session 可用于存储用户特定的数据。但必须注意,过多的会话变量很容易导致性能问题。

          【讨论】:

            【解决方案6】:
            猜你喜欢
            • 2010-11-27
            • 1970-01-01
            • 1970-01-01
            • 2017-02-13
            • 2012-05-18
            • 1970-01-01
            • 2014-07-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多