【问题标题】:Using view model organizes code, but does it have impact on performance?使用视图模型组织代码,但它对性能有影响吗?
【发布时间】:2011-12-22 17:25:48
【问题描述】:

第一部分 我正在开发一个 Web 应用程序,它不是使用 viewmodel 类来组织数据并在 View 中使用,而是使用数据库表模型。因此,例如在我看来,模型声明如下所示:@model aa.webobjects.object - 对象由 dbml 自动生成。这里的问题是除了组织数据之外,使用视图模型有什么好处?我有另一个类,在 dbml 下,例如这样做:

public Product GetProductsByPrice
{
    get
    {
        return WebDataContext.Get().Products.Where(x => x.Price > 10);
    }
}

基本上这用于组织数据,并根据需要从数据库中提取数据。 return 语句将我们带到问题二。

第二部分 我的应用程序有内存泄漏。内存不断增长,一段时间后服务器死机。当我阅读一些文章时,似乎我应该将我的 WebDataContext 包装在 using 语句中,以便它能够正确回收。我的问题是:不使用 Viemodel 是否会导致内存泄漏,如果我使用视图模型来组织数据并重新组织 WebDataContext 的使用,以便将其包裹在 using 语句中会有所帮助吗?

我不确定这是否正确解释了问题。任何帮助将不胜感激。

【问题讨论】:

  • 什么是 WebDataContext?它是从 DbContext、ObjectContext 还是其他一些 ORM 扩展而来的?
  • 我认为它扩展自 System.Data.Linq.DataContext

标签: asp.net performance linq asp.net-mvc-3 datacontext


【解决方案1】:

当然,您必须处理您的 DataContexts 实例(这基本上就是 using 的作用)。我的建议是将其添加到您的 Global.asax 中:

public void Request_End(object sender, EventArgs e)
{
    WebDataContext.Get().Dispose();
}

并让 WebDatacontext.Get() 从 HttpContext.Current.Items 返回它。

这样,您的 datacontext 将可用于整个请求,并且在您不再需要时将其丢弃。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    使用视图模型有什么好处?

    1. 您可以在回发到服务器时使用数据注释和模型绑定。这样可以更轻松地创建带有验证检查的表单。

    2. 正在跟踪从您的数据库中出来的对象的更改并随身携带一些行李。视图模型(作为 POCO)仅包含您需要的数据,而没有与之相关的所有其他跟踪。传递视图模型被认为是比传递实体更好的做法。

    【讨论】:

      猜你喜欢
      • 2020-11-12
      • 2011-12-03
      • 1970-01-01
      • 2011-11-12
      • 2014-01-05
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      相关资源
      最近更新 更多