Constantin: ¡Gracias! Ese enlace tiene un EXE de línea de comandos que hace las pruebas que estaba buscando.
También encontré un enlace de esa página a un artículo más interesante (en Word y PDF) en esta página: Sequential File Programming Patterns and Performance with .NET
En este artículo, se habla de rendimiento-buffered de archivos (OIA, ninguna de lectura/caché de escritura - el rendimiento del disco acaba de crudo)
Citado directamente desde el artículo:
no hay manera fácil de desactivar el almacenamiento en búfer FileStream en el marco V2 .NET.. Uno debe invocar el sistema de archivos de Windows directamente para obtener un identificador de archivo sin buffer y luego 'envoltura' el resultado en un FileStream como siguiente en C#:
[DllImport("kernel32", SetLastError=true)]
static extern unsafe SafeFileHandle CreateFile(
string FileName, // file name
uint DesiredAccess, // access mode
uint ShareMode, // share mode
IntPtr SecurityAttributes, // Security Attr
uint CreationDisposition, // how to create
uint FlagsAndAttributes, // file attributes
SafeFileHandle hTemplate // template file
);
SafeFileHandle handle = CreateFile(FileName,
FileAccess.Read,
FileShare.None,
IntPtr.Zero,
FileMode.Open,
FILE_FLAG_NO_BUFFERING,
null);
FileStream stream = new FileStream(handle,
FileAccess.Read,
true,
4096);
llamadas CreateFile() con el indicador FILE_FLAG_NO_BUFFERING indica al sistema de archivos que omita todo el almacenamiento en memoria caché del software del archivo. El ‘verdadero’ valor pasado como el tercer argumento del constructor FileStream indica que la corriente debe tomar propiedad del identificador de archivo, lo que significa que el identificador de archivo se cerrará automáticamente cuando la corriente está cerrado. Después de hocus-pocus, el archivo sin buffer se lee y se escribe de la misma manera que cualquier otro.
He votado esto, pero no funcionó después de las pruebas. Desafortunadamente, en ese momento ya era demasiado tarde para eliminar mi voto. El código no se compila (no puede pasar 'FileAccess.Read' y es similar a' CreateFile() 'y si escribe las enumeraciones el código no se ejecuta, no puede pasar' null' como hTemplate. – Oliver
@Oliver : No he visto este código en (* mira mirar *) durante 7 años, así que las cosas probablemente han cambiado. Estoy bastante seguro de que funcionó hace 7 años con C# /. NET 2.0 en VS2005 (o tal vez VS2008, no estoy seguro de si ya había cambiado en ese momento.) Veré si puedo encontrar el código original que estaba usando en ese momento y publicar de nuevo si lo encuentro. – Pretzel