Я хотел бы знать, как я могу разделить большой файл, не используя слишком много системных ресурсов. В настоящее время я использую этот код:
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++;
}
}
}
Операция занимает 52.370 секунд, чтобы разделить файл объемом 1,6 ГБ в файлы размером 14 МБ. Меня не волнует, как долго длится операция, меня больше беспокоит системный ресурс, используемый, поскольку это приложение будет развернуто в общедоступной среде хостинга. В настоящее время эта операция максимизирует использование моего жесткого диска IO на 100% и значительно замедляет мою систему. Низкое потребление ЦП; RAM немного нарастает, но кажется прекрасным.
Есть ли способ ограничить эту операцию от использования слишком большого количества ресурсов?
Спасибо