怎样释放非托管所占的资源 有一个Winform下的摄像头使用实例,摄像头被封装成了一个控件,但是当项目第一次运行时正常,以后再次运行就会弹出窗口,如下:出现这个窗口是不是因为资源没有释放,如果是应该怎样进行释放,各位大侠,有相关的方法吗??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 实现IDisposable接口,实现Dispose()方法。 这是摄像头是“Import”非托管资源 在.NET平台中内存管理由GC全负责,无需也不需开发者操心,而对于非托管资源GC就无能为力,这通常有两种参考的方案:Finalize和IDisposable模式,Finalze最大的问题就是执行的不确定性和对性能的阻塞,所以我们更推荐以IDisposable配合Finalized的方式来实现对非托管资源的管理工作。在.NET中,简单的说IDisposable模式就是在自定义类中实现IDisposable接口,在其中定义的Dispose方法中释放非托管资源。那么对于您的问题就有了对应的思路:Q1:是不是只有存在非托管资源的情况下才有必要实现Dispose接口?Q2:在实现Dispose接口的时候,释放托管资源的代码段应该写什么?Q3:托管资源本来就由GC来处理,我想在实现Dispose接口的时候,无需手动写释放托管资源的代码吧?A1:这是显然的,在.NET框架类库中实现IDisposable接口的基本是持有非托管资源的类型,例如IDbConnection、Font、Brush、Steam、TextReader等等,从名字就可以看出端倪;A2:应该怎么写,取决于你释放的非托管资源是什么,一般来说就是调用Win API完成资源清理,例如对于数据库资源资源你通常: if (disposing) { if (connection != null) connection.Dispose(); }而对于文件资源,你可能 if (fileHandle != IntPtr.Zero) { CloseHandle(fileHandle); fileHandle = IntPtr.Zero; }A3:记住,永远避免自行处理托管资源。 实现IDisposable接口,实现Dispose()方法。 应该怎么写,取决于你释放的非托管资源是什么,一般来说就是调用Win API完成资源清理 怎样用JS获取弹出层中dropdownlist的selectedvalue值 存储过程怎样根据字段来合理修改数据 复制服务器时间到本地的办法 新手请教各位高手 C#中泛型的静态方法与一般的静态方法有何区别? c#操作word 屏蔽快捷键的问题。非webbrowser [求助] C# 操作 ORACLE 熟悉c#的进来 C#给出一个值X,判断X是否是该数组内成员的和 如何用代码生成ie浏览器? 再来一张 请教一个插入语句的问题,请各位高手指点
Q2:在实现Dispose接口的时候,释放托管资源的代码段应该写什么?
Q3:托管资源本来就由GC来处理,我想在实现Dispose接口的时候,无需手动写释放托管资源的代码吧?A1:这是显然的,在.NET框架类库中实现IDisposable接口的基本是持有非托管资源的类型,例如IDbConnection、Font、Brush、Steam、TextReader等等,从名字就可以看出端倪;
A2:应该怎么写,取决于你释放的非托管资源是什么,一般来说就是调用Win API完成资源清理,例如对于数据库资源资源你通常:
if (disposing)
{
if (connection != null)
connection.Dispose();
}
而对于文件资源,你可能
if (fileHandle != IntPtr.Zero)
{
CloseHandle(fileHandle);
fileHandle = IntPtr.Zero;
}
A3:记住,永远避免自行处理托管资源。