.NET Garbage Collection 导致 unmanaged handle 提前释放 (SafeHandle)
2010-09-20 02:10
507 查看
这里是整理编辑一下我的原博文
http://sheenspace.wordpress.com/2010/09/19/question-about-net-gc/
从.NET 2.0开始,加入了SafeHandle类用来避免unmaged资源被提前非预期的释放。关于SafeHandle,参看MSDN:
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.safehandle.aspx
这里用一个例子重现IntPtr被提前释放的情况:
该例子由MSDN专家cbrumme文章中代码改造而来
http://blogs.msdn.com/b/cbrumme/archive/2003/04/19/51365.aspx?wa=wsignin1.0
http://sheenspace.wordpress.com/2010/09/19/question-about-net-gc/
从.NET 2.0开始,加入了SafeHandle类用来避免unmaged资源被提前非预期的释放。关于SafeHandle,参看MSDN:
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.safehandle.aspx
这里用一个例子重现IntPtr被提前释放的情况:
class C1 { // Some unmanaged resource handle IntPtr _handle = IntPtr.Zero; static void OperateOnHandle(IntPtr h) { GC.Collect(); GC.WaitForPendingFinalizers(); Console.WriteLine("After GC.Collect() call"); // Use the IntPtr here. Oops, invalid operation } public void m() { OperateOnHandle(_handle); } ~C1() { // Release and destroy IntPtr here Console.WriteLine("In destructor"); } } class Program { static void Main(string[] args) { C1 aC = new C1(); aC.m(); } }
该例子由MSDN专家cbrumme文章中代码改造而来
http://blogs.msdn.com/b/cbrumme/archive/2003/04/19/51365.aspx?wa=wsignin1.0
相关文章推荐
- The DotNet Garbage Collection
- .Net Garbage Collection
- Understanding .net CLR garbage collection
- .Net Garbage Collection
- .NET Garbage Collection配置在.net core的写法
- Three Mode Of DotNet Garbage Collection
- Understanding .net CLR garbage collection
- .net垃圾回收学习[Back to Bascis: Generational garbage collection][翻译&&学习]
- Disposal and Garbage Collection(资源释放处理与垃圾回收)
- 如何判断系统中存在Handle未释放导致的内存泄漏
- Garbage Collection Part 2: Automatic Memory Management in the Microsoft .NET Framework垃圾回收:在微软NET框架自动内存管理 (二)
- .NET Garbage Collection
- Understanding Garbage Collection in .NET[转]
- .NET Garbage Collection Concepts
- PPT - Garbage Collection in .Net (内存管理)
- Understanding Garbage Collection in the .NET Framework.
- .Net CLR垃圾收集原理(Understanding .net CLR garbage collection)
- Garbage Collection in .NET - How it really works
- PPT - Garbage Collection in .Net (内存管理)
- Advanced .NET Debugging: Managed Heap and Garbage Collection(转载,托管堆查内存碎片问题解决思路)