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