Added HashTbl::shrink() - but it only be useful in particular situations
- for the hashTableTest3, it seemed to slow things down a bit loop 0 - Erased 100000 elements (size 2900000 capacity 4194304) 0.31 s loop 1 - Erased 100000 elements (size 2800000 capacity 4194304) 0.01 s loop 2 - Erased 100000 elements (size 2700000 capacity 4194304) 0 s loop 3 - Erased 100000 elements (size 2600000 capacity 4194304) 0 s loop 4 - Erased 100000 elements (size 2500000 capacity 4194304) 0.01 s loop 5 - Erased 100000 elements (size 2400000 capacity 4194304) 0 s loop 6 - Erased 100000 elements (size 2300000 capacity 4194304) 0 s loop 7 - Erased 100000 elements (size 2200000 capacity 4194304) 0 s loop 8 - Erased 100000 elements (size 2100000 capacity 4194304) 0.01 s loop 9 - Erased 100000 elements (size 2000000 capacity 4194304) 0.44 s loop 10 - Erased 100000 elements (size 1900000 capacity 4194304) 0.44 s loop 11 - Erased 100000 elements (size 1800000 capacity 4194304) 0.39 s loop 12 - Erased 100000 elements (size 1700000 capacity 4194304) 0.4 s loop 13 - Erased 100000 elements (size 1600000 capacity 2097152) 0.15 s loop 14 - Erased 100000 elements (size 1500000 capacity 2097152) 0.01 s loop 15 - Erased 100000 elements (size 1400000 capacity 2097152) 0 s loop 16 - Erased 100000 elements (size 1300000 capacity 2097152) 0 s loop 17 - Erased 100000 elements (size 1200000 capacity 2097152) 0.01 s loop 18 - Erased 100000 elements (size 1100000 capacity 2097152) 0 s loop 19 - Erased 100000 elements (size 1000000 capacity 2097152) 0.27 s loop 20 - Erased 100000 elements (size 900000 capacity 2097152) 0.2 s loop 21 - Erased 100000 elements (size 800000 capacity 1048576) 0.1 s loop 22 - Erased 100000 elements (size 700000 capacity 1048576) 0 s loop 23 - Erased 100000 elements (size 600000 capacity 1048576) 0 s loop 24 - Erased 100000 elements (size 500000 capacity 1048576) 0.12 s loop 25 - Erased 100000 elements (size 400000 capacity 524288) 0.04 s loop 26 - Erased 100000 elements (size 300000 capacity 524288) 0.01 s loop 27 - Erased 100000 elements (size 200000 capacity 262144) 0.02 s loop 28 - Erased 100000 elements (size 100000 capacity 131072) 0.02 s loop 29 - Erased 100000 elements (size 0 capacity 2) 0 s
This commit is contained in:
parent
2c73afb6ec
commit
1fbcb6e2c0
@ -74,6 +74,8 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
map.erase(elemI++);
|
||||
}
|
||||
|
||||
map.shrink();
|
||||
Info<< "loop " << iLoop << " - Erased " << nBase << " elements"
|
||||
<< " (size " << map.size() << " capacity " << map.capacity() << ") "
|
||||
<< timer.cpuTimeIncrement() << " s\n";
|
||||
|
@ -542,6 +542,19 @@ void Foam::HashTbl<T, Key, Hash>::clearStorage()
|
||||
}
|
||||
|
||||
|
||||
template<class T, class Key, class Hash>
|
||||
void Foam::HashTbl<T, Key, Hash>::shrink()
|
||||
{
|
||||
const label newSize = canonicalSize(nElmts_);
|
||||
|
||||
if (newSize < tableSize_)
|
||||
{
|
||||
// avoid having the table disappear on us
|
||||
resize(newSize ? newSize : 2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class T, class Key, class Hash>
|
||||
void Foam::HashTbl<T, Key, Hash>::transfer(HashTbl<T, Key, Hash>& ht)
|
||||
{
|
||||
|
@ -242,6 +242,9 @@ public:
|
||||
// Equivalent to clear() followed by resize(0)
|
||||
void clearStorage();
|
||||
|
||||
//- Shrink the allocated table to approx. twice number of elements
|
||||
void shrink();
|
||||
|
||||
//- Transfer the contents of the argument table into this table
|
||||
// and annull the argument table.
|
||||
void transfer(HashTbl<T, Key, Hash>&);
|
||||
|
Loading…
Reference in New Issue
Block a user