Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 依赖注入是否会导致额外的内存消耗?_C#_Asp.net Mvc 4_Dependency Injection_Unity Container - Fatal编程技术网

C# 依赖注入是否会导致额外的内存消耗?

C# 依赖注入是否会导致额外的内存消耗?,c#,asp.net-mvc-4,dependency-injection,unity-container,C#,Asp.net Mvc 4,Dependency Injection,Unity Container,当前应用程序是由其他开发人员使用Unity通过依赖项注入开发的。该应用程序是在MVC4和实体框架中开发的。此应用程序不是大型应用程序,甚至不是中型应用程序 现在,团队希望删除依赖项注入,因为它消耗了大量内存 我的问题是 依赖注入真的会消耗大量内存吗 应用依赖项注入的优点是什么 使用统一的目的是什么 如何从应用程序中删除依赖项注入 我认为您需要首先了解依赖注入是什么,这可能会给您所有4个问题的答案 从这个问题中可以找到一个很好的答案简而言之,删除Unity不太可能解决您的内存问题。此外,U

当前应用程序是由其他开发人员使用Unity通过依赖项注入开发的。该应用程序是在MVC4和实体框架中开发的。此应用程序不是大型应用程序,甚至不是中型应用程序

现在,团队希望删除依赖项注入,因为它消耗了大量内存

我的问题是

  • 依赖注入真的会消耗大量内存吗

  • 应用依赖项注入的优点是什么

  • 使用统一的目的是什么

  • 如何从应用程序中删除依赖项注入


  • 我认为您需要首先了解依赖注入是什么,这可能会给您所有4个问题的答案


    从这个问题中可以找到一个很好的答案简而言之,删除Unity不太可能解决您的内存问题。此外,Unity(及其同类)是控制反转(InversionofControl,IoC)容器,而不是依赖注入。快速谷歌一下,这样你就可以把你的术语弄清楚

    依次回答每个问题:

    1)依赖注入真的会消耗大量内存吗?

    IoC容器不会消耗大量内存(如果使用得当的话),很多非常大的系统都会使用IoC容器。内存消耗可能是系统中其他地方的一个问题。你为什么怀疑你的IoC容器是罪魁祸首?你介绍过吗

    2)依赖项注入的优点?

    一是它让您考虑系统中的依赖关系,而不是仅仅更新所有内容。。。它还允许您使其更易于测试和动态,即您可以更轻松地交换“组件”

    3)统一、依赖注入的目的是什么?

    其思想是,您根据接口而不是具体实现进行编程。这将启用TDD(使用模拟等)和其他最佳实践。这还意味着您可以更轻松地交换实现,而不必破坏一切

    4)如何从应用程序中删除此依赖项注入?

    不要。。。你不会解决你的记忆问题,但会带来很多其他问题。。。如果有什么问题的话,你更有可能使你当前的问题变得复杂

    也就是说。。。如果您错误地配置了Unity,并设置了一些strage生存期等,那么很可能是您以这种方式泄漏内存。然而,把婴儿连同洗澡水一起扔出去并不是前进的方向

  • 依赖注入真的会消耗大量内存吗
  • 依赖注入是一种模式。模式本身不使用任何内存。但是,在实现静态类时不能创建松散耦合的代码,所以在运行时应该创建类实例。然而,与系统的所有其他部分相比,它所消耗的内存量可以忽略不计,特别是在web应用程序中,ASP.NET本身会为每个请求创建大量临时对象。在非常罕见的情况下,您受到非常严格的内存限制(这很难成为ASP.NET web应用程序),您可以构建只包含单例的对象图。这意味着对象只创建一次并缓存,这可以将应用程序创建的垃圾量减少到零。因此,依赖注入本身的使用不必消耗更多内存,而且差异可以忽略不计

    但这并不意味着像Unity这样的DI容器不消耗内存。但我想不起来这曾经是个问题,尽管滥用工具(或bug)总是可能导致内存泄漏。我认为,在决定删除一些可能根本不是问题的工具之前,应该对应用程序进行概要分析

    然而,一个常见的陷阱是实体框架的
    DbContext
    保持活动的时间太长(比单个请求长)。如果这样做,通常会遇到大量问题,例如并发错误和内存泄漏。然而,这与依赖注入没有严格的关系,即使不使用DI,也很容易意外地将
    DbContext
    缓存太长时间

  • 依赖注入的优点
  • 这是一个完整的主题。依赖项注入是关于应用的,尤其是。依赖项反转原则是关于创建松散耦合的代码。如果操作正确,这将提高系统的可维护性。主题

  • 拥有统一、依赖注入的目的是什么
  • Unity只是在练习依赖注入时可以使用的一种方法。请注意,DI容器不是必需的工具。你甚至可以考虑在没有任何工具的情况下使用DI。对于小型应用程序,甚至还有一个

    但一般来说,DI作为一种模式有助于使您的应用程序可维护,DI库(如Unity)将有助于使您的(将所有内容连接在一起的地方)更易于维护

  • 如何从应用程序中删除此依赖项注入
  • 我认为你和你的团队应该退后一步,把这看作是一个开始学习新东西和提高技能的机会,而不是回到过去的做法。人们应用依赖倒置原则、实体原则和依赖注入是有原因的。这是因为这些实践改进了应用程序的整体结构,使整个系统更易于维护

    然而,理解和掌握依赖注入的概念确实需要一些时间,但我认为这是值得的。你将提高你作为开发人员的技能,如果你决定换工作,这将使你对你的公司和任何其他公司更有价值

    在依赖注入这一主题上最有影响力的著作是《一本书》。这本书对我和其他许多人编写代码的方式产生了重大影响。