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/
