依赖注入导致性能不佳(ASP.NET MVC)
Dependency injection causing poor performance (ASP.NET MVC)
我对依赖注入不是很有经验,所以我非常重视您对以下内容的意见。
它(依赖项 injection/IOC)在我公司的 Web 应用程序中使用过。
我们公司的现任编程负责人讨厌这个应用程序,因为他不喜欢 linq、entity framework 和依赖项注入(应用程序中的所有这些功能)。他认为它们共同导致应用程序变慢和脆弱。
他将感知到的性能不佳归咎于 IOC 容器,今天他这样说 "I'm not sure, but it (the IOC container) must use reflection, which is very bad"。
他也不喜欢使用接口(因为这使得在 Visual Studio 中更难找到实现接口的文件的定义)并将此作为 bash IOC 容器的另一个原因一般。
我最近发现了 SOLID 原则,上面的观点并不适合我,所以我想知道经验丰富的开发人员的想法,以及是否有任何事实可以支持任何编程领导的观点。
感谢阅读。
我从未遇到过依赖注入导致的性能问题,我倾向于忽略这一点。
分离代码之间的依赖关系,尤其是像在前端调用数据库这样令人讨厌的代码是一件很容易的事。
然而,使用 LINQ to SQL 肯定会导致比 SQL 服务器管理的存储过程中的代码更差的性能。
这必须与数据库中的代码问题相平衡。 SQL 是一种功能较弱的语言,很难重构,因为如果不使用动态 SQL 就无法调用另一个存储过程。此外,您数据库中的代码可能不受源代码控制。我已经看到项目因数据库中的代码过多而受到严重影响。
就我个人而言,我会使用 linq sql,但不要害怕将存储过程用于数据密集型操作或性能不佳的功能。
我会提防那些不喜欢特定技术但又没有合理论据支持的人。人们往往更喜欢他们最有经验的技术。
如果不改变视角,就无法赢得讨论。
计算机不介意它们使用什么样的代码运行。可能他们甚至 "happier" 使用我们称为 "spaghetti" 的代码,因为要遍历的访问路径较少。
但是我们不为计算机编写代码。
所有这些架构指南,如 SOLID 原则,所有这些工具,如 IoC 容器或 ORM,所有这些第 3、4、5 代计算机语言都不是为计算机设计的,而是 为我们设计的,软件开发人员。
仅仅是因为人的思想不是CPU。
因此我们需要所有这些工具来跟踪我们正在设计的内容,并确保我们编写的内容可以转换为安全的 运行 时间代码。极端地说,您的编程主管甚至不应该允许您使用 C# 或 VB 编写代码,而是强迫您编写汇编代码。然后您将获得无与伦比的性能! (但更可能是一大堆 运行 时间错误)。
正确的观点是谈论可维护代码,因为代码总是在进化。而且经常有最后期限。不是计算机,而是 我们 应该能够理解我们在做什么。我们将关注点分开,因为我们一次只能理解一个关注点。我们使用工具生成 SQL 是因为我们无法毫无错误地键入数百条 SQL 语句,更不用说在数据库发生变化时在合理的时间内修改它们了。我们使用 IoC 容器是因为我们忘记了依赖关系或对象生命周期。
真正的平衡是性能与可维护代码。
清楚这一点后,便有了一个共同点,您可以据此进行性能测量。如果一种工具以轻微的性能下降为代价显着增加了上市时间,这可能是可以接受的。即使是用户也会明白这一点。
(我已经把它比你的直接问题宽了一点,msteel9999 的回答很准确)。
我对依赖注入不是很有经验,所以我非常重视您对以下内容的意见。
它(依赖项 injection/IOC)在我公司的 Web 应用程序中使用过。
我们公司的现任编程负责人讨厌这个应用程序,因为他不喜欢 linq、entity framework 和依赖项注入(应用程序中的所有这些功能)。他认为它们共同导致应用程序变慢和脆弱。
他将感知到的性能不佳归咎于 IOC 容器,今天他这样说 "I'm not sure, but it (the IOC container) must use reflection, which is very bad"。
他也不喜欢使用接口(因为这使得在 Visual Studio 中更难找到实现接口的文件的定义)并将此作为 bash IOC 容器的另一个原因一般。
我最近发现了 SOLID 原则,上面的观点并不适合我,所以我想知道经验丰富的开发人员的想法,以及是否有任何事实可以支持任何编程领导的观点。
感谢阅读。
我从未遇到过依赖注入导致的性能问题,我倾向于忽略这一点。
分离代码之间的依赖关系,尤其是像在前端调用数据库这样令人讨厌的代码是一件很容易的事。
然而,使用 LINQ to SQL 肯定会导致比 SQL 服务器管理的存储过程中的代码更差的性能。
这必须与数据库中的代码问题相平衡。 SQL 是一种功能较弱的语言,很难重构,因为如果不使用动态 SQL 就无法调用另一个存储过程。此外,您数据库中的代码可能不受源代码控制。我已经看到项目因数据库中的代码过多而受到严重影响。
就我个人而言,我会使用 linq sql,但不要害怕将存储过程用于数据密集型操作或性能不佳的功能。
我会提防那些不喜欢特定技术但又没有合理论据支持的人。人们往往更喜欢他们最有经验的技术。
如果不改变视角,就无法赢得讨论。
计算机不介意它们使用什么样的代码运行。可能他们甚至 "happier" 使用我们称为 "spaghetti" 的代码,因为要遍历的访问路径较少。
但是我们不为计算机编写代码。
所有这些架构指南,如 SOLID 原则,所有这些工具,如 IoC 容器或 ORM,所有这些第 3、4、5 代计算机语言都不是为计算机设计的,而是 为我们设计的,软件开发人员。
仅仅是因为人的思想不是CPU。
因此我们需要所有这些工具来跟踪我们正在设计的内容,并确保我们编写的内容可以转换为安全的 运行 时间代码。极端地说,您的编程主管甚至不应该允许您使用 C# 或 VB 编写代码,而是强迫您编写汇编代码。然后您将获得无与伦比的性能! (但更可能是一大堆 运行 时间错误)。
正确的观点是谈论可维护代码,因为代码总是在进化。而且经常有最后期限。不是计算机,而是 我们 应该能够理解我们在做什么。我们将关注点分开,因为我们一次只能理解一个关注点。我们使用工具生成 SQL 是因为我们无法毫无错误地键入数百条 SQL 语句,更不用说在数据库发生变化时在合理的时间内修改它们了。我们使用 IoC 容器是因为我们忘记了依赖关系或对象生命周期。
真正的平衡是性能与可维护代码。
清楚这一点后,便有了一个共同点,您可以据此进行性能测量。如果一种工具以轻微的性能下降为代价显着增加了上市时间,这可能是可以接受的。即使是用户也会明白这一点。
(我已经把它比你的直接问题宽了一点,msteel9999 的回答很准确)。