我正在编写一个C#数据库程序,它从一个数据库读取数据,对数据进行计算,然后将结果写入另一个数据库。这涉及大量数据,需要从源数据库重复读取循环,然后写入目标数据库。
我的记忆力消失了。我尽可能使用dispose
和clear
函数,但我的研究表明这些函数并没有真正释放数据表和数据连接的内存。
我发现的一个建议是将数据库调用放在using
结构中。但对我来说,这意味着在运行期间多次打开和关闭两个数据连接。这似乎相当不优雅,并且使程序运行速度变慢。此外,程序可能会发展到我还需要将数据写回源数据库的程度。
构建工作流的最直接方法是始终保持两个数据库连接都处于打开状态。但这似乎是我问题的一部分。
有没有人对程序结构提出建议以帮助使用内存?
答案 0 :(得分:0)
让我们稍微解决这个问题。
内存用于保存从数据库中检索的数据 清除此数据将解决您的内存使用问题。
所以问题是,你的数据是如何存储的? 它是一个对象列表吗?它在数据集中吗?它是在某种ORM模型中吗? 如果您可以清除/清空/清空/丢弃DATA,那么您应该好好去。
在"中使用"实例化连接对象语句只确保处理连接对象,它不会明确清除您检索到的任何数据。 (ORM可以处理它们内部的数据,但不能处理你调用.ToList()的任何副本。)
外部资源,如数据库,文件系统等,最好利用锁定延迟发布早期策略,这就是为什么您可能需要反馈来打开/关闭您的连接。但这不会有助于你的记忆问题。对于多个命令保持数据库连接打开是完全正确的。