首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ASP.net中,最好的办法是尽快关闭数据上下文吗?

问在ASP.net中,最好的办法是尽快关闭数据上下文吗?
EN

Stack Overflow用户
提问于 2012-09-21 00:11:10
回答 1查看 156关注 0票数 0

给定以下代码:

代码语言:javascript
复制
/// <summary>
/// Add to view count of this article
/// </summary>
public static void IncrementViewCount(int articleID)
{
    using (var db = new MainContext())
    {
        var q = (from c in db.tblArticles where c.ID == articleID select c).SingleOrDefault();
        if (q != null)
        {
            q.Views ++;
            db.SubmitChanges();

            if (q.Views == 500)
            {
                // Call function
            }
        }
    }
}

是不是更好的写法如下:

代码语言:javascript
复制
/// <summary>
/// Add to view count of this article
/// </summary>
public static void IncrementViewCount(int articleID)
{
    var newViews = 0;
    using (var db = new MainContext())
    {
        var q = (from c in db.tblArticles where c.ID == articleID select c).SingleOrDefault();
        if (q != null)
        {
            newViews = q.Views + 1;
            q.Views = newViews;
            db.SubmitChanges();
        }
    }
    if (newViews == 500)
    {
        // Call function
    }
}

请注意,在示例#2中,using块在较早的点关闭。

EN

回答 1

Stack Overflow用户

发布于 2012-09-21 00:14:57

根据你的“函数”需要多长时间,以及你不需要上下文,第二个更好。

读取此

我们实现IDisposable有几个原因:

如果应用程序逻辑需要在预期使用或有效DataContext之后保留实体,则可以通过调用Dispose来强制执行该约定。该实体中的延迟加载器仍将引用DataContext,并在任何代码试图导航延迟属性时尝试使用它。这些尝试将会失败。Dispose还强制DataContext转储其实体化实体的高速缓存,以便单个高速缓存实体不会意外地使通过该DataContext实体化的所有实体保持活动状态,否则将导致看起来是内存泄漏的情况。

可以诱使自动关闭DataContext连接的逻辑使连接保持打开状态。DataContext依赖于枚举查询的所有结果的应用程序代码,因为到达结果集的末尾会触发连接关闭。如果应用程序在C#或VB中使用IEnumerable的MoveNext方法而不是foreach语句,则可以过早退出枚举。如果您的应用程序遇到连接未关闭的问题,并且您怀疑自动关闭行为不起作用,您可以使用Dispose模式作为替代方法。您不需要它们。

更多信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12516637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档