删除/释放性能变化

delete/free performance variation

本文关键字:变化 性能 释放 删除      更新时间:2023-10-16

我开发了一个应用程序,在windows 7下,用Qt 5.5和MSVC 2013在Qt Creator下打开和处理文件。

我在我的应用程序上看到了一些奇怪的滞后:当我打开一个文件时,它需要5秒钟。重新启动应用程序,需要1分钟以上的时间。重新发射:5秒。

这似乎是随机的,当我分析我的应用程序(使用Very Sleepy CS)时,我发现删除耗时0.03秒,总共耗时130秒,免费耗时124秒,新增耗时3秒。

我在代码中使用了一些新数组[]和delete[]。我不知道是什么导致了这种错误。。。其他打开的程序甚至没有改变。

有什么建议/想法吗?

编辑:让我们更准确地说:我想知道是否有什么东西可以导致free随机有效/无效。我分析了我的应用程序,瓶颈是免费的。我不直接免费打电话,因为我使用了delete[]。我需要使用delete[]来处理数组,这是我的情况下最快的方法,性能非常重要。

建议:这里出了问题。有些事情没有按预期的方式工作。有一些关于微观优化的建议,但在你弄清楚发生了什么之前,这不会有帮助。

如果你能在五秒钟内打开该文件,那么它应该不会花更多的时间。如果你读了一个2GB的文件,第二次它全部缓存在RAM中,可能情况正好相反。但不是你正在经历的。

例如,可能的情况是通过坏的网络连接访问服务器,或者一些未定义的行为,如

size_t size; // Forgot to initialise
void* p = malloc (size);
memset (p, 0, size);
free (p);

一次可能根本不需要时间,另一次可能需要130秒。你的应用程序可能会使用多线程,有时会陷入糟糕的状态,长期没有进展。

我只需要启动应用程序,在60秒后进入调试器,然后检查它到底在做什么:-)或者使用探查器:-)