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



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

我是如何处理它的如下:

  1. 将dbf文件转换为DataTable对象
  2. 将DataTable对象添加到模型对象中包含的List<DataTable>
  3. 将列表绑定到DataGridView以用于列查看

这一切都是在后台工作人员中完成的,工作正常。

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

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

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

现在,在引发"内存不足"异常之前的第四个或第五个DataTable之前,这一切都很好。我一定会启动并处理我没有使用的任何对象。我甚至将所有字符串连接更改为字符串生成器附加逻辑,以利用字符串生成器更好的内存管理。

我非常确信我的所有对象都被释放并被垃圾收集,所以我认为问题在于我将所有117个表存储在模型对象的列表中。每当我需要访问这个列表时,我只需传递一个对模型对象的引用。一旦我开始为所有表(DataTables列表和Stringbuilder对象之间的组合)构建sql语句,它就会耗尽内存。

由于我刚从大学毕业,所以我忽略了告知自己是这个行业的新手。我已经编程很多年了,直到最近我才开始遵循"最佳实践"。所以我的问题是,我处理这个项目的方式不对吗?有更好的方法吗?如果有,你能帮我解释一下在我的位置上你会做什么吗?

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

最新更新