[英]GC.Collect() in Dispose in simple class
我在c#中繼承了一種古老的網站項目。 它起源於 2003 年,它到處都有定義的簡單類,這些類繼承自 IDisposible 並實現了一個 Dispose() 方法,其中 GC.Collect() 被調用如下:
public class ProjectAutostart : IDisposable
{
public void Dispose()
{
Dispose(true);
GC.Collect();
}
protected virtual void Dispose(bool disposing) { }
private Int32 _id;
private Int32 _stepid;
private Int64 _stepcounter;
public Int32 ID
{
set { _id = value; }
get { return _id; }
}
public Int32 StepID
{
set { _stepid = value; }
get { return _stepid; }
}
public Int64 StepCounter
{
set { _stepcounter = value; }
get { return _stepcounter; }
}
}
這些類被稱為:
List<Projects.ProjectAutostart> ProjectList = DataLayer.Projects.getProjectAutoStart();
最終出現在:
public static List<Projects.ProjectAutostart> getProjectAutoStart()
{
List<Projects.ProjectAutostart> Projects = new List<Projects.ProjectAutostart>();
DataTable DataTable = SQL.DataTable("getProjectAutoStart", null);
foreach (DataRow dt in DataTable.Rows)
{
Projects.Add(new ProjectAutostart { ID = Convert.ToInt32(dt["projectid"]), StepID = Convert.ToInt32(dt["stepid"]), StepCounter = Convert.ToInt32(e["autostartstepcounter"]) });
}
DataTable.Dispose();
return Projects;
}
我對這類項目沒有經驗,我完全進入了 .net 核心休息區,所以這段代碼對我來說很奇怪。 除了完全奇怪的實現方式之外,這些 GC.Collect() 和 Dispose() 感覺完全沒用,因為它是托管代碼,而且它很簡單 class 沒有任何編碼執行。 為什么有人會把 Dispose 和 GC.Collect() 放在那里? 我應該刪除它嗎?
正如評論中已經指出的,Dispose 方法中的GC.Collect()
在這里完全是多余的。 也許他們一開始就弄錯了處置模式。
dispose 模式的推薦實現如下:
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this); // sic!
}
protected virtual void Dispose(bool disposing)
{
}
但是,由於您的ProjectAutostart
class 是純 DTO 並且沒有任何一次性字段(並且任何派生類也可能沒有),因此您甚至不需要在這里實現 dispose。 只需刪除Dispose
方法和接口聲明即可。 您需要處理的是DataTable
object,但這已經正確完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.