Я пытаюсь загрузить файлы * .iso через мой API, используя multipartform-data, и передать их в локальную папку. Я использовал Stream.CopyAsyn c (destinationStream), и он работал медленно, но не так уж плохо. Но теперь мне нужно сообщить о прогрессе. Поэтому я использовал пользовательский CopyTOAsyn c и добавил в него отчет о проделанной работе. Но метод очень медленный (вообще не приемлем), даже по сравнению с Stream :: CopyToASyn c.
public async Task CopyToAsync(Stream source, Stream destination, long? contentLength, ICommandContext context, int bufferSize = 81920 )
{
var buffer = new byte[bufferSize];
int bytesRead;
long totalRead = 0;
while ((bytesRead = await source.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
await destination.WriteAsync(buffer, 0, bytesRead);
totalRead += bytesRead;
context.Report(CommandResources.RID_IMAGE_LOADIND, Math.Clamp((uint)((totalRead * 100) / contentLength), 3, 99));
}
_logger.Info($"Total read during upload : {totalRead}");
}
Что я пробовал: размер буфера по умолчанию для Stream :: CopyToAsyn c равен 81920 байт, сначала я использовал то же значение, затем попытался увеличить размер буфера до 104857600 байт - без разницы.
Есть ли у вас другие идеи о том, как улучшить производительность пользовательского CopyToAsyn c?