释放数据库操作使用的内存
本文关键字:内存 数据库 操作 释放 | 更新日期: 2023-09-27 18:20:48
我正在编写一个C#数据库程序,该程序从一个数据库读取数据,对数据进行计算,然后将结果写入另一个数据库。这涉及到大量数据,需要从源数据库重复读取,然后写入目标数据库。
我的记忆力不好。我尽可能使用dispose
和clear
函数,但我的研究表明,这些函数并不能真正释放数据表和数据连接的内存。
我发现的一个建议是将数据库调用放在using
结构中。但对我来说,这意味着在运行过程中多次打开和关闭两个数据连接。这看起来相当不雅,而且会使程序运行速度变慢。此外,程序可能会发展到我还需要将数据写回源数据库的地步。
构建工作流程最直接的方法是始终打开两个数据库连接。但这似乎是我问题的一部分。
有人对程序结构有什么建议来帮助使用内存吗?
让我们把这个问题分解一下。
内存用于保存从数据库中检索到的数据
清除此数据将解决内存使用问题。
所以问题是,你的数据是如何存储的?它是一个对象列表吗?它在数据集中吗?它是在某种ORM模型中吗?如果您可以清除/刷新/空/处理数据,那么您应该可以继续。
在"using"语句中实例化连接对象只会确保连接对象被处理掉,而不会显式清除您检索到的任何数据。(ORM可能会处理其中的数据,但不会处理您调用.ToList()生成的任何副本。)
外部资源,如数据库、文件系统等,最好利用锁定延迟发布早期策略,这就是为什么您可能会收到反馈,以便根据需要打开/关闭连接。但这对你的记忆力没有帮助。保持数据库连接对多个命令开放是完全可以的。