我被要求查看的一段 C++ 表现不佳,原因是我们用于在 XML DOM 树中存储节点信息的对象上的“new”调用次数过多。我已经使用 AQTime 和 Very Sleepy 分析器验证了 new 是原因。
这些对象都包含其他几种对象类型和指向对象的指针作为成员,因此节点对象上的每个新对象也会调用所有成员对象的构造函数,我猜这就是每次分配花费这么长时间的原因。这也意味着我们不能只调用像 GlobalAlloc 这样的东西并请求一大块内存——它需要在之后进行初始化。
我一直在研究使用预分配技术来减轻这种糟糕的性能,但是我看到的那些涉及请求大块未初始化的内存,这不适合我需要的东西,而其他人最终最终还是调用 new ,取消任何我们可能会观察到性能提升,所以我想知道是否还有其他我不知道的选项?我有一种感觉,我所要求的无法完成,它要么快速检索未初始化的内存,要么缓慢地初始化内存。请证明我错了:)
谢谢