File I/O with streams – best memory buffer size

Files are already buffered by the file system cache. You just need to pick a buffer size that doesn’t force FileStream to make the native Windows ReadFile() API call to fill the buffer too often. Don’t go below a kilobyte, more than 16 KB is a waste of memory and unfriendly to the CPU’s L1 cache (typically 16 or 32 KB of data).

4 KB is a traditional choice, even though that will exactly span a virtual memory page only ever by accident. It is difficult to profile; you’ll end up measuring how long it takes to read a cached file. Which runs at RAM speeds, 5 gigabytes/sec and up if the data is available in the cache. It will be in the cache the second time you run your test, and that won’t happen in a production environment too often. File I/O is completely dominated by the disk drive or the NIC and is glacially slow, copying the data is peanuts. 4 KB will work fine.

Leave a Comment