是否可以使用托管列表安全地跟踪非托管资源
本文关键字:跟踪 资源 列表 可以使 是否 安全 | 更新日期: 2023-09-27 18:34:39
假设我有一个一次性类,它使用 List
public class MyDisposableClass : IDisposable
{
private readonly List<IntPtr> _myUnmanagedResources = new List<IntPtr>();
~MyDisposableClass()
{
Dispose();
}
public void Dispose()
{
// What is the state of "_myUnmanagedResources," at this stage?
// Is it safe to iterate through this list and free my unmanaged resources?
foreach(var ptr in _myUnmanagedResources)
{
Marshal.FreeHGlobal(ptr);
}
}
}
我的问题:我的 List
列表<>类本身不是一次性的,也没有终结器,所以你没有任何问题。
然而,它并不完全安全,你无法防止行为异常的应用程序多次调用你的Dispose((方法或之后使用IntPtr。 当然,结果会很糟糕。 但是,解决起来非常简单,只需添加_myUnmanagedResources.Clear();