我有一个非常冗长的问题。我的雇主最近给了我一项任务,我要在 C# 中从 117 个 *.dbf 文件创建自定义 DBF 到 SQL 迁移实用程序。每个表大约有 40-50 列和 100 多行。(例如物业管理数据库)
我如何处理它如下:
- 将 dbf 文件转换为 DataTable 对象。
- 将 DataTable 对象添加到
List<DataTable>
模型对象中包含的 a 中。 - 将列表绑定到 DataGridView 以进行列查看。
这一切都是在一个工作正常的后台工作人员中完成的。
我需要做的下一件事是允许用户将此列表转换并保存到一个非常大的 *.sql 文件中(或者,可以选择将其直接迁移到 SQL Express)。同样,我尝试在后台线程中执行此操作。
这是我遇到问题的地方。我有一个接受 DataTable 对象并返回字符串的方法。在其中,我有一个 stringbuilder 对象,它将所有列连接成一个“创建表”语句并附加相关的插入语句以包含数据。
List<DataTable>
此方法在循环中执行,同时传递存储在模型对象中的每个 DataTable 的实例。
现在这工作正常,直到大约第四个或第五个 DataTable 在引发“内存不足”异常之前。我一定会启动并处理我不使用的任何对象。我什至将所有字符串连接更改为 stringbuilder 附加逻辑,以利用 stringbuilders 更好的内存管理。
我很确定我的所有对象都被释放并被垃圾回收,所以我假设问题在于我将所有 117 个表存储在模型对象列表中。每当我需要访问这个列表时,我只需传递一个对模型对象的引用。一旦我开始为所有表、DataTables 列表和 Stringbuilder 对象之间的组合构建一个 sql 语句,它就会耗尽内存。
因为我刚从大学毕业,所以我忽略了告诉我我是这个行业的新手。我已经编程了很多年,直到最近我一直在遵循“最佳实践”。所以我的问题是对你们所有人,我是否以错误的方式处理这个项目?有没有更好的方法可以做到这一点,如果是这样,您能否帮助阐明您将在我的位置上做什么?