繁体   English   中英

使用块与 function 块

[英]using block Vs function block

我想从这两个原因了解关于 memory 管理的更好方法

随着使用使用

 public void AddUser(User user)
        {
            using (var myentities = new MyEntities())
            {
                myentities .AddTotblUsers(user);
                myentities .SaveChanges();
            }
        }

不使用使用

public void AddUser(User user)
            {
                var myentities = new MyEntities();

                myentities .AddTotblUsers(user);
                myentities .SaveChanges();

            }

哪一个从 memory 中删除第一个 object? 第一个,第二个还是两者都一样?

第一个using处理 object 资源并释放由object修复的资源。

在第二种方法中,您依赖垃圾收集器为您执行此操作,但是垃圾收集器会在您的应用程序执行时在某个不确定的点执行此操作。

这里值得一提的是 using 语句被转换为类似:

{
    Entities myentities = new MyEntities();
    try
    {
        myentities.AddTotblUsers(user);
        myentities.SaveChanges();
    }
    finally
    {
        if (myentities != null)
            ((IDisposable)myEntities).Dispose();
    }
}

所以它将整个 object 包装在 try/finally 块中,当完成使用它时,它总是调用 dispose 来释放资源,即使在使用过程中抛出异常,我们也确信我们的资源可能已被释放。

using语句仅对实现IDisposable的对象有用,通常在底层资源是非托管的。

看到这个: http://msdn.microsoft.com/en-us/library/yh598w02.aspx

对于其他场景,建议让自动垃圾收集器完成其工作。

看到这个: http://msdn.microsoft.com/en-us/library/aa691138(v=vs.71).aspx

使用using是更好的方法。

using 语句确保即使在您调用 object 上的方法时发生异常,也会调用 Dispose。 您可以通过将 object 放在 try 块中,然后在 finally 块中调用 Dispose 来获得相同的结果; 事实上,这就是编译器翻译 using 语句的方式。

第一个更好 - 至少对于 MyEntities 实现 IDisposable 的情况......但它更好,尤其是。 如果发生任何异常...

请参阅http://msdn.microsoft.com/en-us/library/yh598w02.aspx

using 块通常用于 object,其中包含对非托管对象或其他不会被垃圾回收的对象的引用。 Using 块只能用于支持IDisposible接口的对象。 它对值何时被垃圾收集没有影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM