我可以通过将SQL命令重构为C#类来提高性能吗?

时间:2010-05-10 20:21:08

标签: c# asp.net sql performance refactoring

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

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

项目(包括)任务(包括)作业

项目,任务和作业是课程。

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

将时间投入到这方面是否有意义?在什么条件下值得呢?

6 个答案:

答案 0 :(得分:8)

如果您的网站速度很慢,您需要在随机开始优化之前弄清楚瓶颈是什么。

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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

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

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

至于您的更新,您应该直接针对sprocs进行更新,但是您还需要清除AppFabric中的Cache,以查找受插入/更新/删除影响的对象。

您也可以使用标准缓存执行相同的操作,但AppFabric还有一些额外的好处。

答案 3 :(得分:1)

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

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

请参阅http://sqlserverpedia.com/wiki/Find_Missing_Indexes

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)