社区
C#
帖子详情
c#中 用 new 分配内存后,怎么把他释放掉?
HanZhu1
2003-12-26 07:14:45
多谢
...全文
6777
19
打赏
收藏
c#中 用 new 分配内存后,怎么把他释放掉?
多谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
psn
2003-12-28
打赏
举报
回复
1
.net回自己释放,不过,如果如果写了析构函数,运行时会把这些对象从GC队列放入另一个队列,等待调用构析函数。显式调用Dispose可以避免对象经历第二个步骤即使他有构析函数。还可以用GC.SuppressFinalize函数,他也能立刻清理对象而不走第二步
loverP
2003-12-28
打赏
举报
回复
http://expert.csdn.net/Expert/topic/2482/2482323.xml?temp=.8409235
ArLi2003
2003-12-27
打赏
举报
回复
using (Form2 fm = new Form2()) {
fm.Show();
}
njx
2003-12-27
打赏
举报
回复
什么也不用做,GC会在适当的时候清理的
eyoexply
2003-12-27
打赏
举报
回复
它自己搞定
cwwwj
2003-12-27
打赏
举报
回复
你不用管它,自动收回了 :)
senzz
2003-12-27
打赏
举报
回复
系统会自己清理的
或者
object.dispose();
hlj321
2003-12-27
打赏
举报
回复
up
yunhi
2003-12-27
打赏
举报
回复
托管堆的内存由GC自动回收,在编写代码的时候也无需显式调用GC。非托管资源的内存释放可以声明一个析构器。
using System;
public sealed class OSHandle
{
// 保存一个非托管资源的win32句柄
private IntPtr handle;
// 构造器初始化句柄
public OSHandle(IntPtr handle)
{
this.handle = handle;
}
//当垃圾收集执行的时候,下面的析构器(Finalize)方法
//将被调用,它将关闭非托管资源句柄。
~OSHandle()
{
CloseHandle(handle);
}
// 返回所有封装的handle句柄
public IntPtr ToHandle()
{
return handle;
}
// 隐式转换操作符也用于返回所封装的Handle句柄
public static implicit operator IntPtr(OSHandle osHandle)
{
return osHandle.ToHandle();
}
// 释放非托管资源
[System.Runtime.InteropServices.DllImport("Kernel32")]
private extern static Boolean CloseHandle(IntPtr handle);
}
loverP
2003-12-27
打赏
举报
回复
1
没必要,什么也不用做,即使你Dispose()它或是GC.Collecct(),垃圾处理机制也只在它认为合适的时候才回收。唯一要注意的是好多之后不知涉及内存,还涉及到许多其它资源的占用,这时候就必须手动调用Dispose()释放,否则就会出现“内存还没用完就发生资源不足”的异常。
yanransoft
2003-12-27
打赏
举报
回复
object.dispose();
dragon515
2003-12-27
打赏
举报
回复
object.dispose()
先锋99999
2003-12-27
打赏
举报
回复
GC.Collect();
huangsuipeng
2003-12-26
打赏
举报
回复
这种情况依靠GC就够了
fengxue727
2003-12-26
打赏
举报
回复
在c#里有com+的概念吗。还没听说过。
com+是最终的二进制码,而c#编译的结果是中间码。
你吧c#编译成.dll不就行拉吗?这个应该很简单的。例如建一个类库。
fengxue727
2003-12-26
打赏
举报
回复
大部分能自动清理有的不行。
的显式清理。不然会出问题的。
IceboundRock
2003-12-26
打赏
举报
回复
把它设置为null,然后调用GC.Collect();
sharpblade
2003-12-26
打赏
举报
回复
自動清理
luyiping
2003-12-26
打赏
举报
回复
object.dispose();
但你不用担心,.net 的垃圾收集器会自己清理的
C#
中
event内存泄漏总结
内存泄漏是指:当一块内存被分配后,被丢弃,没有任何实例指针指向这块内存, 并且这块内存不会被GC视为垃圾进行回收。这块内存会一直存在,直到程序退出。
C#
是托管型代码,其内存的分配和
释放
都是由CLR负责,当一块内存没有任何实例引用时,GC会负责将其回收。既然没有任何实例引用的内存会被GC回收,那么内存泄漏是如何发生的? 内存泄漏示例 为了演示内存泄漏是如何发生的,我们来看一段代码 class Program { static event Action TestEvent; static void Main(string[] args) { var memory =
new
TestA
灵巧指针与垃圾回收(free)
在JAVA 和
C#
中
都有垃圾回收功能,程序员在分配一段内存后可以不再理会,而由垃圾回收自动回收,从而使程序员从复杂的内存管理
中
解脱出来。这是JAVA 和
C#
的一大优点。而C++程序员在用
new
分配了一段内存后,还必须用 delete
释放
,否则将造成资源泄漏。因此,一些C++ 书上经常告诫程序员:要养成好的习惯,
new
与 delete 要成对出现,时刻记住将内存
释放
回系统。但是,事情只是这么简单吗?
C#
交互过程
中
内存
释放
的方法
C#
交互过程
中
内存
释放
的方法
C#
进行平台调用时总共有三种内存
释放
方法:1.CoTaskMemFree
释放
非托管内存 当非托管函数采用COM的内存分配方法CoTaskMemAlloc来
分配内存
,应该使用该方法来
释放
内存,该方法也是.net默认的对非托管内存的内存
释放
方法。 2.delete方法 在C++的非托管函数
中
用
new
方法来
分配内存
是要用该方法来
释放
内存,
释放
内存的托管函数要在非托管的程序
C++
中
使用
new
和delete动态地分配和
释放
内存
C++
中
使用
new
和delete动态地分配和
释放
内存
C++
new
出来的内存,如何
释放
?
C++
new
出来的内存,如何
释放
? delete delete[] 在C++
中
,当你使用
C#
111,079
社区成员
642,570
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章