J'aimerais savoir comment je peux diviser un gros fichier sans utiliser trop de ressources système. J'utilise actuellement ce code:Comment diviser efficacement les gros fichiers
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++;
}
}
}
L'opération prend 52.370 secondes pour diviser un fichier 1.6GB en fichiers 14MB. Je ne suis pas préoccupé par la durée de l'opération, je suis plus préoccupé par la ressource système utilisée que cette application sera déployée dans un environnement d'hébergement partagé. Actuellement, cette opération est à 100% de mon utilisation des systèmes HDD IO et ralentit considérablement mon système. L'utilisation du processeur est faible. RAM augmente un peu, mais ça semble bien.
Y a-t-il un moyen de limiter cette opération en utilisant trop de ressources?
Merci
Pourriez-vous pas courir sur une priorité inférieure séparée fil ? – w69rdy
@ w69rdy - remarque "L'utilisation du processeur est faible" - CPU n'est pas le goulot d'étranglement ici. –
@Marc Ok point juste – w69rdy