[fpc-devel] Who maintains TDictionary? // Re: RFC: Improvements for TDictionary and other hash containers

Martin Frb lazarus at mfriebe.de
Sun Apr 13 21:51:16 CEST 2025


On 13/04/2025 21:37, Michael Van Canneyt via fpc-devel wrote:
>
>
> On Sun, 13 Apr 2025, Martin Frb via fpc-devel wrote:
>
>> On 13/04/2025 20:43, Michael Van Canneyt via fpc-devel wrote:
>>>
>>> But why don't you simply use a TList<TRange> with your custom 
>>> comparer ?
>>> You can then use List.BinarySearch() and retrieve the existing 
>>> TRange at once?
>>>
>>> Your solution seems quite hackish to me. So if you really need it in 
>>> TDictionary, make it protected as you indicated...
>>
>> Because there may be several 10000 entries (ok extreme case, I get 
>> 40000 entries, after scanning several 100 files).
>>
>> And entries are added over time.
>> When adding a new entry, the list must be sorted again. That is the 
>> slow part.
>
> Hm. I assumed a 'Sorted' property as in TStringList,
> which should insert on the correct spot if you do an add, but 
> apparently the generic TList does not have this :-(

Sorry, I was unclear. Yes Sorted = true.

And "Sorted again" => not from scratch, rather "kept sorted", but 
keeping inserting elements into the middle of a list that size => costly.

Sorted list / bin search => lowest memory, but slower
    (so depending on capacity it can be as much as a dictionary... / and 
too low capacity makes it slower)
AVL tree => more memory (maybe can be reduced, by rewriting some of 
it...), fast
TDictionary => currently fastest, and lowest mem consumption (and 
hopefully even less mem)




More information about the fpc-devel mailing list