小编som*_*raj的帖子

当我们没有析构函数时,为什么要调用SuppressFinalize

我有几个问题,我无法得到正确的答案.

1)当我们没有析构函数时,为什么我们应该在Dispose函数中调用SuppressFinalize.

2)Dispose和finalize用于在对象被垃圾收集之前释放资源.无论是托管资源还是非托管资源我们都需要释放它,那么为什么我们需要在dispose函数中使用一个条件,当我们从IDisposable调用这个重写函数时传递'true':从finalize调用时Dispose并传递false.

请参阅我从网上复制的以下代码.

class Test : IDisposable
   {
     private bool isDisposed = false;

     ~Test()
     {
       Dispose(false);
     }

     protected void Dispose(bool disposing)
     {
       if (disposing)
       {
         // Code to dispose the managed resources of the class
       }
       // Code to dispose the un-managed resources of the class

       isDisposed = true;
     }

     public void Dispose()
     {
       Dispose(true);
       GC.SuppressFinalize(this);
     }
   }
Run Code Online (Sandbox Code Playgroud)

如果我删除布尔保护的Dispose函数并实现如下所示.

   class Test : IDisposable
   {
     private bool isDisposed = false;

     ~Test()
     {
       Dispose();
     }


     public void Dispose()
     {
      // Code …
Run Code Online (Sandbox Code Playgroud)

.net c# garbage-collection finalizer suppressfinalize

27
推荐指数
3
解决办法
1万
查看次数

GC.GetTotalMemory(false)和GC.GetTotalMemory(true)之间的区别是什么

有人可以告诉我GC.GetTotalMemory(false)和GC.GetTotalMemory(true)之间的区别;

我有一个小程序,当我比较结果时,第一个循环为GC.GetTotalMemory(true)给出了put put <循环计数0 Diff = 32>; 和<循环计数0 Diff = 0>表示GC.GetTotalMemory(false); 但不应该是其他的吗?

微妙的其余循环打印出一些数字,这两种情况都不同.这个数字表示什么.为什么它会随着循环的增加而改变.

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace test
{   
   struct Address
   {
       public string Street;
   }
   class Details
   {
      public string Name ;
      public Address address = new Address();

   }
   class emp :IDisposable
   {
       public Details objb = new Details();       
       bool disposed = false;
       #region IDisposable Members
       public void Dispose()
       {
           Disposing(true);
       }
       void Disposing(bool disposing)
       {
           if (!disposed)
               disposed = disposing;
           objb …
Run Code Online (Sandbox Code Playgroud)

.net

3
推荐指数
1
解决办法
5145
查看次数