LC7 and 8 - Non responsive processing large text files
Richard Gaskin
ambassador at fourthworld.com
Thu Apr 14 13:25:01 EDT 2016
Roland Huettmann wrote:
> And a more generalized question also discussed before: What exactly
> happens when LC tries to read from a very very large file? Maybe it
> is Gigabyte or even Terabyte file? It could just be too big to read
> and it should then still not return empty or become unresponsive,
> but return some error message.
The responsiveness has to do with the tight loop not surrendering enough
time for Windows' current liking. He covered that well in his earlier post:
<http://lists.runrev.com/pipermail/use-livecode/2016-April/225896.html>
This is independent of the size of the file, and really independent any
file I/O operations at all. Other tasks in tight loops can also trigger
Windows to consider an app "unresponsive" even though it's running.
Hopefully they'll be able to to massage the event loop to handle the
latest Win API expectations, which have apparently changed in recent
versions.
As for large files, I've had very good experiences parsing files larger
than 6 GB. Given that this is well outside of any internal memory
addressing, I'm assuming LC would work equally well on any size of file
the local file system can handle.
This requires, of course, that we write our apps the way most apps are
written: with very large files, rather than read the whole thing into
RAM and expect one giant memcopy, we read in chunks and process each
chunk separately, as your script does.
LC's internal addressing allows for a single block of memory to up to
about 1 GB IIRC (Mark, please correct me if that's not right), which is
far larger than most operations will be able to handle efficiently anyway.
Which leads us to:
> And what happens when very large amounts of data are read into memory,
> processed there, and placed into a field? Is there anything preventing
> unresponsiveness?
Usually yes, and out-of-memory error should be thrown. But low-memory
situations are very tricky: if there isn't enough memory to complete
execution of the script, there may not be enough memory to report the error.
Mark can probably provide more details on that, but I've seen iffy
handling of low-memory situations with a wide range of applications and
even operating systems. It's just a hard problem to solve with
consistent grace.
But fortunately, low-memory situations are rare on modern systems if we
just remain mindful of how to use memory efficiently: read stuff in
chunks, process what you need, and if an aggregate operation results in
a large amount of data consider flushing it to disk periodically as you
go - "open...for append" on our output file is very efficient for that
sort of thing.
--
Richard Gaskin
Fourth World Systems
Software Design and Development for the Desktop, Mobile, and the Web
____________________________________________________________________
Ambassador at FourthWorld.com http://www.FourthWorld.com
More information about the use-livecode
mailing list