[fpc-pascal] Question on how to avoid memory trouble using FindFirst(), FindNext() and FindClose()

Michael Van Canneyt michael at freepascal.org
Sat Feb 3 18:59:33 CET 2007



On Sat, 3 Feb 2007, Marco van de Voort wrote:

> > Yes it will, because the reallocations don't happen as often. 
> > The sorting introduces an overhead anyway, whether you set capacity or not.
> 
> Yes, but I was talking about slowness in general, not just from the heap.
> 
> And TStringList with those huge internal list has to move on avg half of the
> array. If TStringList had an extra indirection (array of ptr to blk of ptrs)
> it would be less so.

Eh ? What happens if you do a Insert(0,'SomeString') ? Don't you need to move
across all blocks ? Or will you just grow the first block ?

Anyway, it could be a nice idea to implement as TLargeStringList.

>  
> > The correct procedure IMHO is
> > - Set capacity
> > - Load
> > - Sort
> 
> > I tested such things with an N^3 algorithm for my daytime job, and the
> > difference is very noticeable.
> 
> With a single array or a multilevel one? 

Multilevel.

>  
> > All this doesn't exclude that a specialized class may be more suitable for
> > the job.
> 
> To be honest, the only good point of TStringList seems to be that it is
> default available on all Object Pascal. The specialised stuff (splitting
> strings) is also plagued with oddities. (most notably the fact that
> characters under space are always used as separator)

Why do you call this oddities ? For GUI programming (and that's what it was
implemented for) it makes perfect sense.

> 
> > I just want to illustrate that, if programmed correctly, TList,
> > TStringList and friends can still get you a long way...
> 
> I think that the lengths to which people will go to stick to them paints
> what is needed to make a serious effort to make them legacy.

I fail to see why, but no doubt you have your reasons. I'd like to see a complete
list of 'issues' with TStrings (not TStringList, that's just a specific implementation).

Maybe we can then create a TFPStrings which would be interface compatible,
(in the sense that it can replace TStrings without source changes. It can
have internal differences, like the space handling) but with a more sensible 
behaviour ?

I mean, I know since some time you don't particularly like tstrings and tlist 
and whatnot (although I don't fully know why), but, by all means:
let's then do an effort and design something better.

Starting with a list of issues seems like a good beginning.

> 
> There should be a set of container classes in a separate unit (a unit not
> existing in Delphi most notably) that is Open Source and works on Delphi
> too.

Like Decal was set up to be ?

I'm all for starting such a thing. I would be the first one to use such a beast if it was better.
It was the prime reason for implementing TFPlist.

Michael.



More information about the fpc-pascal mailing list