《你不常用的c#之二》:略谈GCHandle
2016-02-15 09:17
281 查看
我们在使用c#托管代码时,内存地址和GC回收那不是我们关心的,CLR已经给我们暗箱操作。
但是如果我们在c#中调用了一个非托管代码,比如vc的DLL,而且他有个回调函数,需要引用c#中的某个对象并操作,
这时候你就得要小心了。
要是非托管代码中用到得托管代码那个对象被GC给回收了,这时候就会报内存错误。
所以我们就要把那个对象“钉”住(pin),让它的内存地址固定,而不被垃圾回收掉,然后最后我们自己管理,自己释放内存,这时候就需要GCHandle,来看个msdn上的例子:
http://blog.csdn.net/robingaoxb/article/details/6199514
但是如果我们在c#中调用了一个非托管代码,比如vc的DLL,而且他有个回调函数,需要引用c#中的某个对象并操作,
这时候你就得要小心了。
要是非托管代码中用到得托管代码那个对象被GC给回收了,这时候就会报内存错误。
所以我们就要把那个对象“钉”住(pin),让它的内存地址固定,而不被垃圾回收掉,然后最后我们自己管理,自己释放内存,这时候就需要GCHandle,来看个msdn上的例子:
http://blog.csdn.net/robingaoxb/article/details/6199514
相关文章推荐
- 基于C#实现手机号码归属地接口调用
- C# Datatable排序
- C# 文件下载四方法
- C#索引器
- C#中的增删改查
- 【C#】基础实例演练
- C#学习——对象和类
- C#遍历文件夹,只需一句话
- C#八数码游戏实例
- C#向其它电脑共享文件夹上传及下载文件
- Visual Studio 2008 可扩展性开发(八):关于用户界面的种种(下)
- Visual Studio 2008 可扩展性开发(八):关于用户界面的种种(上)
- Visual Studio 2008 可扩展性开发(六):操作Solution Explorer
- Visual Studio 2008 可扩展性开发(五):操作Solution、Project和ProjectItem
- Visual Studio 2008 可扩展性开发(四):添加新的命令
- c#正则表达式详解
- Visual Studio 2008 可扩展性开发(三):Add-In运行机制解析(下)
- Visual Studio 2008 可扩展性开发(三):Add-In运行机制解析(上)
- Visual Studio 2008 可扩展性开发(二):Macro和Add-In初探
- Visual Studio 2008 可扩展性开发(一):VS概览