Sorting text is *VERY* slow in LC9 on Windows (Re: Accumulating text is *VERY* slow in LC9 on Windows)

Mark Waddingham mark at livecode.com
Fri Sep 10 09:06:57 EDT 2021


On 2021-09-02 18:38, Mark Waddingham via use-livecode wrote:
> We will endeavour to fix for 9.6.5-rc-1 (due 'real soon now'!).

So I have been prodding the windows 'accumulating large strings' speed 
problem this week (in amongst other things).

It is definitely memory allocation causing the problem.

The rule for extending a string buffer when inserting/appending more 
text is pretty much the same as 6.7 (the amount of 'extra space' it asks 
for each time is a little less - but changing it to the constant used in 
6.7 makes no difference). What is different between 6.7 and 7.0+ is the 
memory allocation patterns of the engine itself and I think it is this 
which is invariably causing a whole new buffer having to be allocated 
when appending to large strings, rather than the existing one being 
extended.

The windows heap is much more prudent than UNIXy counterparts it would 
seem - where UNIX heaps will happily leave plenty of free space (which 
the heaps know about and thus can re-use), Windows appears to avoid that 
like the plague (which I'm sure is the case for lots of historical 
reasons and backwards compatibility). [ To give a very rough analogy, 
the map of used space in a heap on windows is like a block of cheddar; 
whereas on UNIXy systems it will be like a block of edam ].

So anyway, long story short, making a string buffer grow in proportion 
to its size appears to mitigate the problem - I still need to finesse 
things a bit though to ensure that memory starvation doesn't occur when 
you have a couple of large mutating strings but all being well we should 
be able to get something together for 9.6.5-rc-1.

The only caveat is that it might cause apps mutating lots of 
medium->large strings concurrently to take up more memory in general 
(i.e. in that extra unused 'just in case' space at the end of each 
buffer) but no more than the same apps would on any other (UNIX-based) 
platform (and any issue arising from that could be resolved by moving to 
the 64-bit windows engine).

For reference, the bug about the string accumulation problem as posed by 
Ben is https://quality.livecode.com/show_bug.cgi?id=23319 (this will 
also fix the sort speed too - as the final step the sort command 
performs internally is re-accumulating the string in the new order).

Warmest Regards,

Mark.

P.S. I cannot really say whether this will help with the various 'IDE 
can be like treacle' on Windows problems - but it definitely can't hurt!

-- 
Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps




More information about the use-livecode mailing list