Hello Richard,

you are 100% right with your conclusion to handle bigger blocks instead of
single characters. With big blocks its much faster since it does not have to
do all the VFS-conversions for every character, but for a bigger amount. You
should implement a Buffer that takes all the data and that is written to the
card at once if its full. This speeds up your application a lot. And simply
this is also what Windows does with the conduit and its internal streams
etc. I see no other approach than buffering to speed up your application.
Maybe you can still optimize it after the buffering but it will give you the
biggest boost.

Thomas

"Richard Coutts" <[EMAIL PROTECTED]> schrieb im Newsbeitrag
news:[EMAIL PROTECTED]
>
> My app imports/exports text files to the PC using a Conduit.  It's a
pretty
> simple implementation that is very fast.  I then wanted to add the ability
> to convert text files directly on the device by importing/exporting the
same
> text files to the expansion Card for when users were away from their
> conduit.  To do this, I simply ported my Conduit code to my App and switch
> the file stream calls with VFS calls.  Everything went well except its
> *much* slower than the Conduit.  E.g., the conduit takes a few seconds to
> convert a 256K file, by my VFS/Card implementation takes 5 minutes or so
to
> convert the same file.
>
> The nature of the text files is that each line tends to only have a dozen
> characters or so, and there are usu. thousands of lines.  When importing
the
> file, I simply read a line at a time and process it.  With my conduit, I
> used fgets().  I didn't see a VFS/fgets() function, so I wrote a very
simple
> one that reads the file a character at a time, using VFSFileRead, into a
> buffer and returns the buffer when a NULL is hit.  Likewise, I didn't see
an
> fprintf(), so I wrote a quick function to output a string to the Card
using
> VFSFileWrite (it writes the whole string, not a character at a time).
>
> I'm starting to think that it's so slow because of too may file access
> calls.  E.g., instead of reading a character at a time, I should read 1K
> characters into a buffer and then process them.  Likewise, instead of
> writing my short strings I should buffer them and write out 1K at a time.
>
> I haven't implemented this yet, mostly because I'm wondering if this is
the
> most optimal approach.  If anyone knows of an faster implementation, I'd
> appreciate hearing it.
>
> Thanks!
> Rich
>
>
>



-- 
For information on using the Palm Developer Forums, or to unsubscribe, please see 
http://www.palmos.com/dev/support/forums/

Reply via email to