Подскажите пожалуйста, что более правильно использовать для копирования файла в полностью асинхронной службе WCF?
System.IO.File.Copy(sourceFileName: full_path_temp_file, destFileName:
full_path_file);
или
await stream.CopyToAsync(destination: file_stream);
Я смотрел код на https://referencesource.microsoft.com для обоих методов, File.Copy реализован через вызов WinAPI т.е. полностью неуправляемый код в отличии от Stream.CopyToAsync, но к сожалению File.Copy не асинхронный, т.е. он заблокирует такой важный для WCF ресурс как поток, и в целом это может отрицательно сказаться на производительности службы.
(Вынесено из обсуждения в комментариях.)
CopyToAsync
— более общая функция, т. к. она работает с произвольными потоками. Поэтому она теоретически может быть медленнее, менее оптимальной, чем прямой вызов File.Copy
(например, за счёт другого выбора размеров буфера).
Тем не менее обычно разница незначительна, т. к. операции с файловой системой обычно существенно медленнее операций с потоками и переключениями контекста. А значит, время на обращение и отклик файловой системы должно доминировать в общем времени исполнения функции копирования.
Я бы посоветовал провести профилирование обоих вызовов на типичных для вашего приложения размерах файлов и нагрузках на файловую систему. (Мы, к сожалению, не знаем, какие типичные данные для вашей системы, поэтому наши тесты могут показать не такую производительность, как у вас.) [Только во время профилирования не копируйте один и тот же файл много раз подряд, иначе он окажется в кеше ОС, и результаты профилирования будут неправильными.]
Я бы поставил на то, что обе функции покажут примерно одинаковое время, и в этом случае асинхронный вариант однозначно лучше. Если вдруг окажется, что асинхронный вариант реально на ваших данных намного медленнее, лишь тогда имеет смысл думать о том, что важнее для вашей программы — не занимать лишний поток или копировать скорее. (А для этого, наверное, нужно снова профилирование — при каком из вариантов мы обслужим больше клиентов за единицу времени?)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В универе поставили задачу написать транслятор с С# языка на язык ассемблера(x86)Честно говоря ниразу в жизни даже не трогал ассемблер, а уже...
Реально ли организовать поиск по стороннему, не своему, сайту по ключевым словам? Нужно искать соответствующие страницы, дальнейший парсинг...
при сравнении данным методом "а" строковой и "В", будет ли метод использовать код символов в юникод? У а – 97, у В – 66Значит если сравнить их без...