处理垃圾收集的Db连接

时间:2019-03-25 15:43:18

标签: database-connection new-operator dbcontext using

我有一个c#控制台应用程序,该应用程序从csv文件中加载大量数据,对其进行解析,然后创建或更新记录。该文件包含数千条记录,这些记录创建了一个大型.net数据表。 ADO.net用于使用DbContext创建或更新记录。

使用数据表对象的foreach循环来创建/更新会导致RAM使用率上升,并最终引发超出内存的异常。

如果我将数据库上下文放在foreach循环中的using中,则内存由GC管理,并且程序运行没有问题,但是我担心继续创建新的db连接不是最佳实践。

泄漏记忆

using (myEntities db = new myEntities())
{
      db.Database.Connection.ConnectionString = __ConnString;

       foreach (DataRow item in _DataTable.Rows)
        {
           //create / update records
        }
}

不会泄漏内存

foreach (DataRow item in _DataTable.Rows)
{
     using (myEntities db = new myEntities())
     {
         db.Database.Connection.ConnectionString = __ConnString;
         //create / update records
      }
}

在foreach循环的using内部使用dbconnection是否存在重复性的缺点?

0 个答案:

没有答案