如何在 Delphi 应用程序中找到大内存消耗的来源?

2w2cym1i  于 2023-03-22  发布在  其他
关注(0)|答案(3)|浏览(113)

我遇到了一个非正常的内存消耗从我的应用程序写在 Delphi 10西雅图。这是一个客户端服务器胖客户端类型的应用程序使用SDAC的Devart作为数据库组件。
我不知 prop 体的工具,但我想知道是什么原因导致内存消耗。
我观察到以下情况:当我启动一个命令时,exe使用的内存增长了很多(高达1 GB,在一个曾经最多使用200MB的应用程序中),有时这会以out of memory错误结束。内存不足错误的堆栈跟踪没有用,似乎是随机的。
有谁能提出一个研究记忆消耗的方法吗?
我目前正在研究FastMM4的内存泄漏,我设法删除了一些,但只有一些小的(TStringlist或一些小的TBitmap),没有什么可以证明1GB的内存消耗是合理的。
有没有一种方法可以说“unit4.pas分配了100MB的RAM”或任何其他类似的有用的内存使用报告?
多谢了。
我觉得卡住了,因为我不知道这个任务的工具。

gt0wga4j

gt0wga4j1#

你查询数据库表中的BLOB类型的列吗?如果是,那么找出最大的数据集,看看避免它们是否可以避免内存消耗。在PHP 7.1中,我遇到了类似的问题,MySQLi在TEXT列(older bugLongtext max memory error using mysqli_query)上。
实际上,解决/防止内存消耗肯定是可以做到的-database abstraction layer肯定知道一种替代方法来查询这样的列,这种方法对双方都更有效:服务器和客户端。请随意编辑此答案以包含您的实际代码。

4xy9mtcn

4xy9mtcn2#

您需要的是一个好的内存/分配分析器。
我不知道在这样的分析器中哪些特性是典型的,因为我只使用过一个,但是我使用的这个允许在运行期间的任何时候获得一个报告,显示所有分配的内存以及在应用程序中分配内存的位置。

h5qlskok

h5qlskok3#

提供的数据不足以提供任何建议。如果问题与使用SDAC有关,您可以联系Devart支持。

相关问题