DBF到SQL迁移实用程序 - 解决方案的最佳方法

时间:2012-12-12 02:33:55

标签: c# exception memory data-migration memory-management

我有一个很长的问题。我的雇主最近给了我一个任务,我要在117 * .dbf文件中用C#创建一个自定义DBF到SQL迁移实用程序。每个表有大约40-50列和100多行。 (例如,物业管理数据库)

我如何处理它如下:

  1. 将dbf文件转换为DataTable对象。
  2. 将DataTable对象添加到模型对象中包含的List<DataTable>
  3. 将列表绑定到DataGridView以进行列查看。
  4. 这一切都是在一个工作正常的后台工作者中完成的。

    我需要做的下一件事是允许用户将此列表转换并保存到一个非常大的* .sql文件中(或者可选地,将其直接迁移到SQL Express)。我再次尝试在后台线程中进行此操作。

    这是我遇到问题的地方。我有一个接受DataTable对象并返回字符串的方法。在其中,我有一个stringbuilder对象,它将所有列连接成一个'create table'语句,并附加相关的insert语句以包含数据。

    此方法在循环中执行,同时从模型对象中存储的List<DataTable>传递每个DataTable的实例。

    现在,在抛出“Out of Memory”异常之前,这可以正常工作,直到大约第四或第五个DataTable。我肯定会启动并处理我不使用的任何物体。我甚至将我的所有字符串连接更改为stringbuilder附加逻辑,以利用stringbuilders更好的内存管理。

    我很确定我的所有对象都被解除分配和垃圾收集,所以我假设问题在于我将所有117个表存储在模型对象的列表中。每当我需要访问此列表时,我只需传递对模型对象的引用。一旦我开始为所有表构建一个sql语句,DataTables列表和Stringbuilder对象之间的组合,就会耗尽内存。

    我忽略了通知说我是新手,因为我刚从大学毕业。我一直在编程多年,直到最近我一直在遵循'最佳实践'。所以我的问题是你们所有人,我是以错误的方式处理这个项目的吗?有没有更好的方法来做到这一点,如果是这样,你能帮助我解释你在我的位置会做些什么吗?

1 个答案:

答案 0 :(得分:0)

好吧,我做了有道理的事情。我只是简单地将SQL写入文件而不是将其写入字符串然后将该字符串写入文件。这似乎已经成功了。不知道为什么我之前没有想到它。