Me gustaría saber cómo puedo dividir un archivo grande sin utilizar demasiados recursos del sistema. Actualmente estoy usando este código:Cómo dividir archivos grandes de manera eficiente
public static void SplitFile(string inputFile, int chunkSize, string path)
{
byte[] buffer = new byte[chunkSize];
using (Stream input = File.OpenRead(inputFile))
{
int index = 0;
while (input.Position < input.Length)
{
using (Stream output = File.Create(path + "\\" + index))
{
int chunkBytesRead = 0;
while (chunkBytesRead < chunkSize)
{
int bytesRead = input.Read(buffer,
chunkBytesRead,
chunkSize - chunkBytesRead);
if (bytesRead == 0)
{
break;
}
chunkBytesRead += bytesRead;
}
output.Write(buffer, 0, chunkBytesRead);
}
index++;
}
}
}
La operación se lleva 52.370 segundos para dividir un archivo de 1,6 GB en archivos de 14MB. No me preocupa cuánto tiempo dura la operación. Me preocupan más los recursos del sistema utilizados, ya que esta aplicación se implementará en un entorno de alojamiento compartido. Actualmente, esta operación maximiza el uso de HDD IO de mis sistemas al 100%, y ralentiza considerablemente mi sistema. El uso de la CPU es bajo; RAM aumenta un poco, pero parece estar bien.
¿Hay alguna forma en que pueda restringir esta operación de usar demasiados recursos?
Gracias
se puede no ejecutarlo en un hilo separado de menor prioridad ? – w69rdy
@ w69rdy: tenga en cuenta que "el uso de la CPU es bajo": la CPU no es el cuello de botella aquí. –
@Marc Ok fair point – w69rdy