Bear in mind that your test also includes the allocation of a very large buffer which is very inefficient for the GC both to create initially and then every time it needs to perform a collection or when it needs to marshal data over from your managed byte[] to an unmanaged void* for the ReadFile() call which sits behind the FileStream's Read() method.