2013-11-25 64 views
3

C#3.5中,Windows 7+釋放註冊表句柄更快

看看下面的代碼,例如:

using (RegistryKey regKey = Registry.Users.OpenSubKey(regKeyString, true)) 
{ 
    if (polRegKey.GetValue("Foo") == null) 
     polRegKey.CreateSubKey("Foo"); 
} 

現在讓我們假設我執行該代碼每一秒,在一個循環。

當我使用Process Explorer查看正在運行的進程時,我看到的是正在生成的該註冊表項的新句柄,但未及時銷燬。相反,我看到的是每秒創建一個新的句柄,然後在大約20秒後,幾乎所有句柄的大部分都被同時銷燬。這是我期望從垃圾回收器中得到的那種行爲。我錯在認爲C#的using語句會自動處理對象嗎?它似乎是以一種非常懶惰的方式來做,如果它真的在做它。

回答

5

您沒有處置polRegKey.CreateSubKey("Foo");的值。

using (RegistryKey regKey = Registry.Users.OpenSubKey(regKeyString, true)) 
{ 
    if (polRegKey.GetValue("Foo") == null) { 
     using (polRegKey.CreateSubKey("Foo")) { 
      Console.Writeline("Key Created! You could also call Dispose()!"); 
     } 
    } 
} 
相關問題