2010-03-06 2 views
4

Что делает ~ делать. Это класс Asp.Net v2, который я только что унаследовал. Класс работает нормально Theres стандартный конструктор под ним ~ VNC Что используется?Odd Constructor

using System; 
using System.Web; 
using System.Data; 
using System.Web.Services; 
using System.Web.Services.Protocols; 
using System.Data.SqlClient; 
using System.Configuration; 

namespace UtopianClasses 
{ 
    public class VNC 
    { 
     public VNC(){ } 

     ~VNC() { 
      GC.Collect(); 
     } 

     public String VNCViewFilesLocationMCR 
     { 
      get { 
       return ConfigurationManager.AppSettings["VNCViewFilesLocation"].ToString();  
      } 

... Отдых класса

ответ

3

Как уже упоминалось, это деструктор. Тем не менее, вы не должны явно не реализовывать деструктор, вы действительно не должны принудительно собирать коллекцию GC внутри деструктора, потому что деструктор вызывается самим сборщиком мусора. Насколько я могу судить, это запах кода на любом языке GCed.

1

Это destructor, не конструктор. Они обычно используются для выпуска собственных ресурсов или дескрипторов в классах, которые обертывают собственные API.

Это, как говорится, добавление конструктора, который вызывает GC.Collect(), - плохая идея. Деструктор вызывается только во время финализации, поэтому сборщик мусора уже очищает этот объект и любой объект, на который ссылается этот объект. Для этого нет оснований, поскольку он просто добавляет лишние накладные расходы и фактически замедлит работу системы.

Возможно, это было написано кем-то с фоном C++, который не понимал тонкостей управления памятью в .NET. Я бы рекомендовал удалить это вообще.

+0

Это была моя первая мысль, но тогда я представляю себе достойного программиста на С ++ (я не один!) Будет только очищать вещи, за которые несет ответственность объект. –