Calc/Performance/Specific Bottlenecks
From Apache OpenOffice Wiki
Specific bottlenecks to be worked on, identified using tools such as
valgrind --tool=callgrind
.
The Zaske case
Content relocated to Calc/Performance/Zaske, section preserved for external references linking here.
Sorting values within functions
Content relocated to Calc/Performance/sorting_values_within_functions, section preserved for external references linking here.
Querying data within functions
An internal customer's document (sorry, can't publish) doing lookup queries that don't fit into the current caching strategy.
Findings:
- 8% in 51613353 calls to com::sun::star::i18n::casefolding::getNextChar() via
- 39696595 calls to utl::TransliterationWrapper::isEqual() via
- ScTable::ValidQuery() via
- 8888 calls to ScQueryCellIterator::GetThis() via
- lcl_LookupQuery()
- 8888 calls to ScQueryCellIterator::GetThis() via
- ScTable::ValidQuery() via
- 39696595 calls to utl::TransliterationWrapper::isEqual() via
- 5% in ScTableValidQuery() most in String() and ~String() of aCellStr
- 200873636 calls to com::sun::star::i18n::casefolding::getNextChar() via
- 33173401 calls to com::sun::star::i18n::Transliteration_caseignore::compare()
- 5% in com::sun::star::i18n::oneToOneMappingWithFlag::find()
- Replicated mpIndex[high] access, might be better using temporary pointer.
- 5% in com::sun::star::i18n::casefolding::getValue()
- 58% overall in ScTable::ValidQuery() and below
- TODO: Cache results of ValidQuery()? Similar to ScLookupCache?
- 11% overall in 27341713 calls to ScBroadcastAreaSlot::StartListeningArea() and below, of which 10% are in ::std::set::insert() and below.
- TODO: refactor implementation of broadcast slots.