× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



What happens if you change it to use fgetc() instead of fread()?


Adam Glauser wrote:
Scott Klement wrote:
Do you mean that you want to read your file using fgets()? If so, please be aware that fgets() can only be configured to read lines of text delimited by either LF or CRLF. It can't be used with any arbitrary delimiter.

if you really mean fread(), then I'd suggest setting up some loops and benchmarking the diff. Essentially, fread() and read() work the same -- except that fread buffers the data. Will it perform better than buffering it yourself? Hard to say without benchmarking... and I haven't done any.

Okay, so I got some code working with fread(). Code's still a bit rough, but in case any one is interested, here's what I found.

buffread0: http://code.midrange.com/9def61bedb.html
buffread1: http://code.midrange.com/1e70379662.html

I ran each five times in a row, reading a 5.98 MB file with two repeated records of differing length. Times in microseconds.

buffread0: buffread1:
2373000 5799000
2368000 5831000
2368000 5810000
2367000 5718000
2352000 5737000

So it looks like either I'm doing something really dumb (likely) or fread() is quite a bit heavier than open() with roll-your-own buffering (less likely).

As Simon pointed out, I'm essentially having to double buffer due to not wanting to make assumptions about record length. I suspect the results would be much closer if bufferread1 were to read a larger chunk, and handle the record delimiter finding differently.


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.