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