c# - 更快地释放注册表句柄

标签 c# windows resources

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/

相关文章:

c# - 为什么异步等待而不被告知

windows - 使用 7z 命令行创建具有当前日期的存档会损坏名称

c# - 检测屏幕保护程序是否处于事件状态和/或用户是否已在 Windows 中锁定屏幕

python - 为什么此命令无法打印 Python 命令的正确退出代码?

javascript - 可以将JavaScript用作Asp.Net MVC的嵌入式资源吗?

c# - 找到多个相同类型的自定义属性。时间:2019-03-17 标签:c#botframework中的异常

c# - 如何使用 Parallel.For(..) 在主线程上填充 List<T>

c# - OrderBy 方法中的 If 语句优于 Where 方法

resources - Airflow :如何指定资源池的定量使用?

c# - 资源文件修改日期