Sorting text is *VERY* slow in LC9 on Windows (Re: Accumulating text is *VERY* slow in LC9 on Windows)
Ben Rubinstein
benr_mc at cogapp.com
Fri Sep 10 14:10:03 EDT 2021
Hi Mark,
Thank you for this, very promising.
Only two things puzzled me. One you've already addressed when you corrected
the specified cheese.
The other was
> The only caveat is that it might cause apps mutating lots of medium->large
> strings concurrently to take up more memory in general... > ... (and any issue arising from that could be resolved by moving to the 64-bit
> windows engine).
I have been doing my tests on the 64-bit Windows engine. What am I missing?
TIA (and T as always for all your work),
Ben
On 10/09/2021 14:06, Mark Waddingham via use-livecode wrote:
> 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!
>
More information about the use-livecode
mailing list