在Sql Server上执行.NET存储过程的开销是多少?

时间:2009-04-24 16:07:57

标签: c# .net sql-server performance stored-procedures

当你选择在.NET vs T / SQL中编写存储过程时,会发生某种类型的上下文切换,封送,序列化等。

是否有关于此开销的任何确凿事实,因为它与决定使用.NET vs T / SQL存储过程有关?

您做出决定时使用了哪些因素?

对我来说,由于我的学习曲线,使用C#进行开发比在T / SQL中开发快1000%,但是什么时候这不会抵消性能损失(如果有的话)?

3 个答案:

答案 0 :(得分:2)

与开关,封送等相关的开销与此无关,除非......您的数据尚未存在于数据库中。

也就是说,我倾向于使用T-SQL尽可能多地执行存储过程 - 包装在ORM中。

真的,那就是答案。查看实体框架,NHibernate,Linq To SQL等。退出编写存储过程(我现在可以听到下来的投票),并用C#来做。

编辑:添加了更多信息 存储过程难以测试(本质上是数据绑定),它们提供的速度优于动态sql,并且实际上并不是更安全。也就是说,对于像排序和过滤这样的事情,关系数据库比C#更有效。

但是,如果必须使用存储过程(并且有时间),请尽可能使用TSQL。如果你有一个需要执行的大量逻辑,那就是没有设置,那么就打破C#。

有一次我这样做是为我的数据库添加一些额外的日期处理。我所在的公司使用了5-4-4个月的财政日历。在SQL中几乎不可能做到这一点。所以我用C#来代替那个。

答案 1 :(得分:2)

我说这取决于。

使用CLR程序可以找到的一些内容更好

  1. 使用本机.NET对象 - 文件系统,网络等
  2. 使用TQL未提供的功能,或者不如.NET,例如正则表达式
  3. 对于其他人而言,无论是在易用性还是原始执行速度方面,您都会发现TSQL程序更好

    1. 使用基于集合的逻辑(其中abc在def或abc中不在ghi中)
    2. CRUD操作

答案 2 :(得分:1)

这是一个宗教问题,但根据您正在做什么,您的架构以及您正在使用的记录数量,可能存在很大差异。测试确实是了解您的情况的最佳方式。

一般来说,存储的程序会更好地扩展;但在你的情况下可能不是这样,或者这对你来说可能不是一个重要的考虑因素。