有人可以就性能,内存使用量,编码的难易程度,正确的操作等因素在使用using语句包装DataContext或不使用LINQ-SQL中表达其优缺点的意见。

更新:在一个特定的应用程序中,我体验到,没有将DataContext包装在using块中,由于没有为GC释放 Activity 对象,因此内存使用量一直在增加。如下面的示例所示,如果我持有对q个对象的列表和q个访问实体的引用,则创建的对象图不会发布给GC。

使用DataContext

    using (DBDataContext db = new DBDataContext())
    {
        var q =
            from x in db.Tables
            where x.Id == someId
            select x;

        return q.toList();
    }

不使用并保持 Activity 状态的DataContext
  DBDataContext db = new DBDataContext()
  var q =
        from x in db.Tables
        where x.Id == someId
        select x;

    return q.toList();

谢谢。

最佳答案

相对于其他事物,创建DataContext可能会很昂贵。但是,如果您已完成此操作并希望尽快关闭连接,则可以这样做,同时也释放上下文中的所有缓存结果。请记住,无论如何都要创建它,在这种情况下,您只是让垃圾收集器知道还有更多免费的东西可以摆脱。

使DataContext成为一个短期使用的对象,使用它,完成工作单元,离开……这正是您正在使用的功能。

这样的优点:

  • 更快地关闭连接
  • 处理释放的内存(内容中的缓存对象)

  • 缺点-更多代码?但这不应该起到威慑作用,您在这里正确使用了using

    在这里查看Microsoft答案:http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/2625b105-2cff-45ad-ba29-abdd763f74fe

    如果需要使用using / .Dispose()的简短版本:

    关于linq - 在LINQ-SQL中,包装DataContext是using语句-优点缺点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2292462/

    10-13 07:58