使用视图模型组织代码,但它是否会影响性能?

时间:2011-12-22 17:25:49

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

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

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

基本上这用于组织数据,并根据需要从数据库中提取数据。返回声明给我们带来了问题二。

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

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

2 个答案:

答案 0 :(得分:0)

使用View模型有什么好处?

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

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

答案 1 :(得分:0)

肯定你必须处理你的DataContexts实例(这基本上就是使用它)。我的建议是在Global.asax中添加它:

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

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

通过这种方式,您的datacontext将可用于整个请求,并且当您不再需要它时将被处理。

希望它有所帮助。