【发布时间】:2018-04-09 12:47:00
【问题描述】:
我正在使用 C# 下的 Windows 服务,它基本上扫描特定目录以查找新创建的文件。如果已创建文件,则文件名字符串将被拆分,文件名的特定子字符串用于查询 SQL 数据库。由于该服务永久运行,我希望它尽可能地对内存友好,因此我被告知在将 SqlDataAdapter 和 DataTable 对象放入 usings 时使用自动垃圾收集。考虑以下代码:
using (SqlDataAdapter da = new SqlDataAdapter(cmdstring, con))
{
using (DataTable dt = new DataTable())
{
da.Fill(dt);
if (dt.Rows.Count != 0)
{
splitlst.Add(dt.Rows[0][0].ToString());//kunde
splitlst.Add(dt.Rows[0][1].ToString());
splitlst.Add(dt.Rows[0][2].ToString());
splitlst.Add(dt.Rows[0][3].ToString());
splitlst.Add(dt.Rows[0][4].ToString());
splitlst.Add(dt.Rows[0][5].ToString());
}
}
}
这是处理垃圾收集的有效方法吗?我真的不习惯这种方式工作,所以如果有人能让我明白什么时候故意控制垃圾收集,我会非常感激。
【问题讨论】:
-
一般来说,如果您正在与不属于您的应用程序的进程/服务/程序/任何东西进行交互,那么 using 语句是一个好主意。
-
using与IDisposable不是garbage collection有关。 -
这里的垃圾回收不是你控制的。尽可能使用
using-语句(IDisposable)。但这与负责收集垃圾(不再使用的对象占用的内存)的垃圾收集器无关。处置是关于非托管对象和关于托管对象的垃圾回收。 -
无论何时创建
IDisposable对象,最好尽快调用Dispose。using是一个很好的方法,如果这要在同一个方法中发生的话。
标签: c# idisposable