簡體   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