Linq 导致性能低下的依赖项注入(ASP.NET MVC)

Linq 导致性能低下的依赖项注入(ASP.NET MVC),linq,entity-framework,dependencies,inversion-of-control,Linq,Entity Framework,Dependencies,Inversion Of Control,我对依赖注入不是很有经验,所以我非常重视您对以下内容的看法 它(依赖注入/IOC)在我公司的一个web应用程序中使用 我们公司目前的编程主管讨厌这个应用程序,因为他不喜欢linq、实体框架和依赖注入(所有这些都是应用程序中的功能)。他认为,这些因素共同导致了应用程序的缓慢和脆弱 他将糟糕的表现归咎于国际奥委会的容器,并在今天说了这样的话:“我不确定,但它(国际奥委会容器)必须使用反射,这是非常糟糕的。” 他还不喜欢使用接口(因为这使得在VisualStudio中查找实现接口的文件的定义更加困难)

我对依赖注入不是很有经验,所以我非常重视您对以下内容的看法

它(依赖注入/IOC)在我公司的一个web应用程序中使用

我们公司目前的编程主管讨厌这个应用程序,因为他不喜欢linq、实体框架和依赖注入(所有这些都是应用程序中的功能)。他认为,这些因素共同导致了应用程序的缓慢和脆弱

他将糟糕的表现归咎于国际奥委会的容器,并在今天说了这样的话:“我不确定,但它(国际奥委会容器)必须使用反射,这是非常糟糕的。”

他还不喜欢使用接口(因为这使得在VisualStudio中查找实现接口的文件的定义更加困难),并将此作为抨击IOC容器的另一个原因

我最近发现了坚实的原则,上述观点并不适合我,因此我想知道经验丰富的开发人员的想法,以及是否有任何事实支持任何编程指导意见


感谢阅读。

我从未遇到过依赖注入导致的性能问题,我倾向于忽略这一点

分离代码之间的依赖关系,特别是前端对数据库的调用这样的问题,是一件很简单的事情

然而,与SQLServer管理的存储过程中的代码相比,使用LINQtoSQL肯定会导致性能下降

这必须与数据库中的代码问题相平衡。SQL是一种功能较弱的语言,很难重构,因为如果不使用动态SQL,就无法调用另一个存储过程。此外,数据库中的代码可能不受源代码管理。我看到过很多项目因为数据库中的代码太多而受到严重影响

就我个人而言,我会使用LINQtoSQL,但不要害怕将存储过程用于数据密集型操作或性能较差的函数


我要提防那些不喜欢某项技术但又不以合理的论据支持它的人。人们倾向于选择他们最有经验的技术

这是一种如果你不改变观点就无法赢得的讨论

计算机不在乎它们运行什么样的代码。也许他们对我们称之为“意大利面条”的代码更“高兴”,因为要遍历的访问路径更少

但是我们不为计算机编写代码

所有这些体系结构指导原则,如SOLID principles,所有这些工具,如IoC容器或ORM,所有这些第三代、第四代和第五代计算机语言,都不是为计算机设计的,而是为我们软件开发人员设计的

仅仅是因为人类的思维不是中央处理器

因此,我们需要所有这些工具来跟踪我们正在设计的内容,并确保我们编写的内容可以转换为安全的运行时代码。走极端的话,你的编程主管甚至不应该让你享受用C#或VB编写代码的奢侈,而应该强迫你编写汇编代码。然后你会得到无与伦比的表现!(但更有可能是大量运行时错误)

正确的观点是讨论可维护的代码,因为代码总是不断发展的。而且常常有最后期限。不是电脑,但我们应该能够理解我们在做什么。我们将关注点分开,因为我们一次只能理解一个关注点。我们使用工具来生成SQL,因为我们无法在没有错误的情况下键入数百条SQL语句,更不用说在数据库更改时在合理的时间内修改它们了。我们使用IoC容器是因为我们忘记了依赖关系或对象生命周期

性能与可维护代码之间的平衡是非常重要的

一旦清楚了这一点,就有了一个共同点,您可以从中进行性能度量。如果某个工具以轻微性能下降为代价大幅增加上市时间,这是可以接受的。即使是用户也会理解这一点



(我把这个问题说得比你马上要问的问题要宽泛一些,msteel9999的回答很贴切)。

不要争辩。量!使用探查器检测代码中的性能瓶颈。告诉这位首席开发人员,现在是2015年。如果使用不当,一切都可能导致性能低下。尤其是当O/RMs对此非常敏感时。然而,依赖注入作为一种模式,不会导致应用程序性能低下。我也曾经遇到过这样的论点,即接口会使代码导航变得困难。但是,开始使用Ctrl+F12(转到实现)时,您就成功了。这很快就会成为一种习惯。找到一种方法重新利用反思所做的工作。只要你不是每次都重新确定价值观,问题就不会那么严重。如果可以缓存或记忆查询计划或表达式树。。。这将是一个很好的优化。这是一个非常好的答案,其重要性无论怎样强调都不为过。“这是一种如果你不改变观点你就无法赢得的讨论类型”-很好的朋友!!