社区
C#
帖子详情
c#中 用 new 分配内存后,怎么把他释放掉?
HanZhu1
2003-12-26 07:14:45
多谢
...全文
9781
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#
new
与malloc
文章详细比较了
C#
中
的
new
关键字与C/C++
中
的malloc函数在实例化对象和内存分配上的差异。
new
关键字在托管堆上
分配内存
,自动调用构造函数并由垃圾回收器管理,而malloc则需要手动
释放
内存,适用于低级别内存操作。
C#
推荐使用
new
关键字以简化内存管理。,
关于
C#
调用C++dll传指针
释放
内存问题
本文详细介绍了
C#
调用C++动态链接库(DLL)时涉及的内存管理问题。首先,当
C#
预先
分配内存
并传递给DLL时,需要在
C#
端
释放
内存。其次,如果DLL内部重新
分配内存
,
C#
则应使用引用传递,并可能需要DLL提供的
释放
接口。最后,对于使用CLR模式的C++DLL,
C#
能通过FreeHGlobal正确
释放
new
分配的内存。确保正确处理内存分配和
释放
可避免内存泄漏,维持应用程序稳定性。
【C++】动态内存管理 ④ ( 对象的动态创建和
释放
引申思考 | 基础数据类型 内存分析 | malloc
分配内存
delete
释放
|
new
分配内存
free
释放
内存 )
文章探讨了C/C++
中
malloc和
new
内存分配,以及free和delete内存
释放
的兼容性。指出虽然malloc和
new
的内存管理方式不同,但基于基础类型使用delete和free
释放
内存可以正常工作。
C#
调用C++DLL时
释放
非托管内存
文章介绍了在
C#
中
调用C++DLL时如何处理由malloc等方法分配的非托管内存,避免内存泄漏。方法包括将分配方法改为CoTaskMemAlloc以便自动
释放
,或者在非托管代码
中
添加
释放
方法并通过IntPtr在
C#
中
调用。此外,还强调了确定内存分配方式的重要性以及托管代码无法直接
释放
malloc和
new
分配的内存。
编程语言详细介绍
C#
中
new
的几种用法
本文详细介绍了
C#
中
new
关键字的三种用法:作为运算符创建对象和调用构造函数,作为修饰符隐藏继承成员,以及在泛型约束
中
的使用。文
中
通过实例展示了
new
如何在不同场景下工作,并强调了使用
new
修饰符消除警告的情况。
C#
111,129
社区成员
642,540
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章