删除/释放性能变化
delete/free performance variation
我开发了一个应用程序,在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秒后进入调试器,然后检查它到底在做什么:-)或者使用探查器:-)
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- OpenMP阵列性能较差
- 递归列出所有目录中的C++与Python与Ruby的性能
- C++取消引用指针.为什么会发生变化
- 为什么在读取文件大小时文件IO速度会发生变化
- 大小相等但成员数量不同的结构之间的性能差异
- 为什么constexpr的性能比正常表达式差
- 在类中使用随机生成器时出现性能问题
- 为什么cudaMemGetInfo报告设备内存总量的变化
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 如何避免LED在循环状态变化中闪烁?
- 海湾合作委员会 ARM 性能下降
- 当 I2C 值在C++中发生变化时收到通知
- GCC 和 Clang 代码性能的巨大差异
- 在容量内调整矢量大小时的性能影响
- 为什么使用默认构造函数"{}"而不是"= default"存在性能变化?
- 删除/释放性能变化
- FFTW性能变化
- 如何分析和/或消除由于内存分配引起的性能变化
- 条件样式不断变化的 IF 性能