gpt4 book ai didi

performance - Delphi - 内存使用情况并将类作为 Var 参数传递

转载 作者:行者123 更新时间:2023-12-03 19:50:37 26 4
gpt4 key购买 nike

德尔福 XE6。我正在为 Excel 编写一个 COM 插件(使用 Add-In Express)。我遍历所有行,读取给定的列,这是一个企业名称。然后,我使用自己的算法尝试在数据库中匹配此名称,如果可以匹配名称(又名芝加哥大学与芝加哥大学等),则更新电子表格的其余列。程序编译并运行。我的问题是,在某个点之后,它会显着减慢。

例如,我有 1,000 行数据。我将此数据复制了 6 次,在我的电子表格中生成了 6,000 行。我平均每 50 行处理一次。最多 3600 行,平均每行 450 毫秒。始终在 3600 行时,平均值跃升至(并保持)在每行 4200 毫秒的范围内。

我一直在寻找内存泄漏,使用

ReportMemoryLeaksOnShutdown:=True; 

并没有找到任何。它是每 1000 行完全相同的数据,因此它与数据无关。我正在运行 64 位 Windows (8.1),虽然是 32 位 Excel 和 32 位编译的 dll。我检查了我的应用程序正在使用的内存(使用 GetProcessMemoryInfo)...它可能从 120MB 开始,并在整个过程中上升 4-5 MB。它以 60-80K 的增量跳跃。

我尝试每 200 行保存一次 Excel 电子表格,但这没有任何区别。

我的匹配算法使用 RegEx,所以我尝试使用外部 RegEx 库。那没什么区别。我现在正在用 AnsiStartsText 而不是 Regex 重写匹配例程......

我觉得我正在研究某种内存问题。我正在使用我创建的类。此类称为 AccountSearch。它有一个称为 AccountCriteria 的后代类,以及一个称为 HITS 的对象 TLIST(也就是被评分的可能性)。我在各种功能和程序之间传递这些信息。将类作为参数传递时是否有任何独特的问题?实际上,它们被视为 VAR 参数,不需要解决额外的内存问题,对吗?它们没有被复制,当用作参数时它们不使用额外的内存,对吗?

还有什么我应该看的吗?

最佳答案

对象是通过引用传递的,是的。

由于您正在创建一个 COM 插件,并且使用的是旧版本的 Delphi,因此您需要确保您没有被 OLE 引用泄漏错误所困扰。这些不会在关机时报告为内存泄漏,因为它们并不是真正的内存泄漏:

https://marc.durdin.net/2012/07/understanding-and-correcting-interface-reference-leaks-in-delphis-vcl-olectrls-pas/

关于performance - Delphi - 内存使用情况并将类作为 Var 参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33038382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com