簡體   English   中英

GC.Collect() 在 Dispose 中簡單 class

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM