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
语句会自动处理对象?它似乎以一种非常懒惰的方式来做,如果它真的在做的话。
最佳答案
您没有处理 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()!");
}
}
}
关于c# - 更快地释放注册表句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20195439/