释放注册表句柄的更快方法

3

C# 3.5,Windows 7以上

以以下代码为例:

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

现在假设我每秒都要执行这段代码,并且是在循环中执行。当我使用进程资源管理器查看正在运行的进程时,我会发现新的句柄被生成到注册表键上,但并没有及时地被销毁。相反,每秒都会创建一个新的句柄,然后大约20秒后,几乎所有句柄中的一大部分都会同时被销毁。这是垃圾回收器的典型行为。如果 C# 的using语句自动处理对象的释放,那么我的想法是错误的吗?实际上,它似乎以非常懒惰的方式进行释放,甚至有可能根本没有释放。
2个回答

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()!");
        }
    }
}

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接