Begin forwarded message:
From: Levente Uzonyi <leves@elte.hu> Date: December 3, 2009 7:13:27 AM GMT+01:00 To: The general-purpose Squeak developers list <squeak-dev@lists.squeakfoundation.org> Subject: Re: [squeak-dev] Re: squeak XTream Reply-To: The general-purpose Squeak developers list <squeak-dev@lists.squeakfoundation.org>
On Tue, 1 Dec 2009, Andreas Raab wrote:
Well, I'm still in the business of shopping for a faster version of FileStream ;-)
I uploaded two packages to the inbox (Files-ul.37 and Multilingual-ul.68) which aim to speed up the read performance of FileStreams. Files-ul.37 adds read buffering to StandardFileStream and subclasses, while Multilingual-ul.68 inlines a few methods. With these changes I measured ~13.5x speedup for:
Smalltalk garbageCollect. [ FileStream readOnlyFileNamed: 'yourlargefile.txt' do: [ :file | [ file next == nil ] whileFalse ] ] timeToRun
and ~39.5x speedup for:
Smalltalk garbageCollect. [ StandardFileStream readOnlyFileNamed: 'yourlargefile.txt' do: [ :file | [ file next == nil ] whileFalse ] ] timeToRun
(where yourlargefile.txt is an 1MB sized file with random data)
The code is far from clean, some tests fail (15 of 37 BitmapStreamTests), but it seems to be working (though I'm sure there are a few bugs). I would be happy if someone could find out why the tests fail. Also a better test suite would be helpful.
Note that as soon as a write is performed the read buffer is killed, so mixed read/write behavior is probably slower than before. Also note that loading the changes may harm your image/changes file.
Levente