C# 资源释放问题

2025-03-01 09:12:50
推荐回答(4个)
回答1:

Dispose是用来释放非托管资源的,并不会释放托管资源,new是从托管堆中分配得资源,只能通过GC回收,无法手动释放。你可以使用System.GC.Collect()来强制进行GC,用System.GC.WaitForFullGCComplete()等待GC完成。
如果确实需要,使用System.Runtime.InteropServices.Marshal来手动申请和释放非托管内存,但是,其中无法保存托管对象,只能保存整型、浮点型和字符型及其数组,或者具有StructLayout或MarshalAs特性的结构或类。 (会带来一定的运行期代价)

回答2:

小问题!你把要释放的对象弄错了。这样修改
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image.Dispose(); //释放pictureBox1.Image
System.IO.File.Delete(@"C:\1.jpg");
}
另外 pictureBox1.Image=Image.FromFile("C:\1.jpg")中字符串有问题,
应改为
pictureBox1.Image=Image.FromFile(@"C:\1.jpg");

回答3:

赞成二楼的观点,你释放的不是资源文件,而是控件3950

回答4:

赞成二楼的观点,你释放的不是资源文件,而是控件。