mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-08-01 09:04:13 +02:00
Replace hash.keys().contains(k) with hash.contains(k) (35 call sites)
QHash/QMap::keys() allocates a list of every key on each call, then contains() searches it linearly - an accidental O(n) plus allocation where a direct O(1) lookup was meant. 35 occurrences across 7 files, found while profiling project load times (context: #553/#560). The hot one is ElementPictureFactory::getPictures(), which runs once per element instance on project load: on the 3399 KiB example project (191 instances, 129 cache hits) the keys() detour cost 45 ms of the 1.34 s total - measured, not estimated; the fix reproducibly shaves ~35-45 ms off that load. The remaining call sites are UI paths (search&replace, dynamic text model, undo commands) where the waste scales with selection/model size. No behavior change: for QHash/QMap, keys().contains(k) and contains(k) are equivalent by definition. (cherry picked from commit 0a7f8f072fa68de7c01a9fc134a4bc8e16d62062)
This commit is contained in:
@@ -86,7 +86,7 @@ DeleteQGraphicsItemCommand::DeleteQGraphicsItemCommand(
|
||||
for (auto table : m_removed_contents.m_tables)
|
||||
{
|
||||
//Table is already managed, jump to next loop
|
||||
if (m_table_scene_hash.keys().contains(table))
|
||||
if (m_table_scene_hash.contains(table))
|
||||
continue;
|
||||
|
||||
auto first_table = table; //The first table if the table is linked to another
|
||||
@@ -290,9 +290,9 @@ void DeleteQGraphicsItemCommand::undo()
|
||||
|
||||
for(DynamicElementTextItem *deti : m_removed_contents.m_element_texts)
|
||||
{
|
||||
if(m_elmt_text_hash.keys().contains(deti))
|
||||
if(m_elmt_text_hash.contains(deti))
|
||||
m_elmt_text_hash.value(deti)->addDynamicTextItem(deti);
|
||||
else if (m_grp_texts_hash.keys().contains(deti))
|
||||
else if (m_grp_texts_hash.contains(deti))
|
||||
{
|
||||
Element *elmt = m_grp_texts_hash.value(deti)->parentElement();
|
||||
elmt->addDynamicTextItem(deti);
|
||||
|
||||
Reference in New Issue
Block a user