【问题标题】:Asp .Net MVC Viewmodel should be class or struct?Asp .Net MVC Viewmodel 应该是类还是结构?
【发布时间】:2011-01-17 03:41:44
【问题描述】:

我一直在思考我们在 asp.net MVC 中创建的视图模型对象的概念。我们的目的是实例化它并将其从控制器传递给视图,视图读取它并显示数据。

那些视图模型通常通过构造函数实例化。我们不需要初始化成员,我们可能不需要重新定义/覆盖无参数构造函数,也不需要继承特性。

那么,为什么我们不在视图模型中使用结构类型而不是类。它将提高性能。

【问题讨论】:

    标签: asp.net-mvc c#-4.0


    【解决方案1】:

    您认为“它会提高性能”是理所当然的,但您真的确定吗?在非常具体的情况下,结构比类表现更好。为简单起见,我进行了概括,但场景主要是:

    • 它们是不可变的。
    • 它们很小,例如通常不超过 3 - 4 个字段。
    • 您在极短的时间内生成了 吨(通常为数百万或更多)。
    • 您正在与他们紧密合作。
    • 它们经过的代码路径针对这些特定结构进行了优化,不执行装箱/拆箱操作。

    还有其他的,但这只是我的想法。即便如此,我们谈论的往往是微不足道的性能提升。以 微秒 为单位。

    即使您可以保证您的视图模型是不可变的和微小的,其他条件也不成立。假设每个请求一个视图模型,您的 Web 服务器每秒不会处理数百万个请求。此外,MVC 框架不能在紧密循环中使用这些,并且不包含针对此特定结构优化的代码路径。因此,MVC 框架最终将对您的值类型执行大量装箱/拆箱操作。

    底线 - 不要微优化或过度设计您的解决方案。上课就好了。在优化方面,始终衡量以确保您将时间投入到有价值的事业中。鱼大了就别管小事了。

    【讨论】:

    • 非常感谢您的时间和详尽的解释,Levi。你的想法让我很开心。
    • 另外,结构体通过堆栈传递(更多信息要传输),类通过指针通过堆传递(更少信息要传输)。我知道这是一个老问题,但我认为新访客应该了解更多。
    • 精彩的总结非常感谢你回到煎鱼
    • 所以@MiroJ 我知道还有 5 年的时间,但我真的需要知道。这里的公司使用 struct 作为视图模型。我当时告诉我,我认为这不是一个好的模式。我错了吗?我该如何辩解这不是一件好事,或者我应该忘记它。
    • 恕我直言。我认为您应该使用尽可能小的对象,即结构。尤其是当类被设计为复杂时(函数、构造函数等)。同时,现在 ASP.NET 已经如此优化,可能已经无关紧要了。创建一个测试并使用一个和另一个选项调用一个函数 10,000 并查看它们的行为(时间、内存等)
    【解决方案2】:

    使用一个类。一些视图模型需要构造函数、转换器和更多功能,为什么要限制为结构? (例如,如果您有 EF4 对象并且需要使用它们制作 POCO...)

    【讨论】:

      猜你喜欢
      • 2016-10-21
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多