수천 개의 작은 개체를 생성하는 응용 프로그램이 있습니다 (상위 500,000 개). 이러한 객체를 힙에 할당하는 객체 팩토리가 있습니다.파괴 속도 증가
이 작은 객체를 보유하고있는 객체가 범위 (드라이버)를 벗어나면 65 %의 처리 시간이이 작은 객체를 파괴하는 데 소모된다는 것입니다.
map
, entries
및 fields
에는 추상 기본 클래스에 대한 포인터가 들어 있으며 각 기본 클래스에는 많은 하위 클래스가 있습니다.
class Driver {
boost::ptr_map<std::string, Class1-Base> map;
}
class Class1-Base {
boost::ptr_vector<Class2-Base> entries;
}
class Class2-Base {
boost::ptr_vector<Class3-Base> fields;
}
class Class3-Base {
unsigned long value;
}
내가 시도 여러 가지 방법이 응용 프로그램의 성능을 높일 수 :
응용 프로그램 아키텍처는 다음 형식을 따릅니다.
내가 먼저 일반 포인터와 데이터 구조를 사용하고 명시 적으로 클래스의 소멸자에서 삭제 된 개체를.
그때 boost::shared_ptr<>
와 데이터 구조를 사용하여 시도하지만 난 그 참조 횟수가 상당한 오버 헤드를 발생하고 큰 혜택을 제공하지 않았다 결정했다.
지금까지 나온 해결책은 boost::ptr_container
을 사용하므로 힙 개체의 소유권을 가져오고 컨테이너가 범위를 벗어날 때 자동으로 삭제합니다. 이 솔루션을 사용하면 개체를 파괴하는 데 많은 시간을 소비 할 수 있습니다.
이번에는 개체가 파괴되는 것을 막기 위해 할 수있는 일이 있습니까?
이러한 개체 아무것도 가지고 있습니까 _other_ 동시에 모든 사람이 죽은 것 같은 수명이 다른 개체보다? 그들의 소멸자 중 누구라도 당신이 보존해야 할 고의적 인 부작용이 있습니까? – Useless
@Useless 아니요, 모든 개체의 수명이 같으며 부작용이 없습니다. – packersfan16
최적화가 활성화 된 시간을 측정 했습니까? 또한, _what_ 시간 중 65 %가 소멸자에 소비됩니까? – sehe