【发布时间】:2022-01-10 22:33:03
【问题描述】:
我在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 核心 restfull 领域,所以这段代码对我来说很奇怪。 除了完全奇怪的实现方式之外,这些 GC.Collect() 和 Dispose() 感觉完全没用,因为它是托管代码并且它是简单的类,没有任何编码执行。为什么有人会把 Dispose 和 GC.Collect() 放在那里? 我应该删除它吗?
【问题讨论】:
-
对我来说似乎是一种反模式。它没有任何用处 - 我只是删除所有无用的代码。
-
我同意马修的观点。删除垃圾代码是一个健康的过程。 (而且非常充实,我可能会补充)
-
更好的是,提交给thedailywtf.com,让大家开怀大笑
-
此外,SQL 查询可能应该重构为使用 Dapper,或者至少直接从 Reader 读取到新对象中。
Convert.ToInt32应该是演员(int)
标签: c# visual-studio web-site-project