powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Stream CopyToAsync vs CopyTo
13 сообщений из 13, страница 1 из 1
Stream CopyToAsync vs CopyTo
    #39947780
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мелкий диспут неожиданный. я раньше не проверял, но тут не давно в глаза бросилось cpu скачки на ровном месте как я думал.
собственно вот тестовый код
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public static async Task FileCopyAsync(string sourceFileName, string destinationFileName, CancellationToken cancellationToken = default(CancellationToken))
        {
            using (var sourceFile = File.OpenRead(sourceFileName))
            {
                using (var destinationFile = File.OpenWrite(destinationFileName))
                {
                    Console.WriteLine($"Copying async {sourceFileName} to {destinationFileName}...");
                    await sourceFile.CopyToAsync(destinationFile);
                    Console.WriteLine("Done");
                }
            }
        }

        public static void FileCopy(string sourceFileName, string destinationFileName)
        {
            using (var sourceFile = File.OpenRead(sourceFileName))            
            {
                using (var destinationFile = File.OpenWrite(destinationFileName))                
                {
                    Console.WriteLine($"Copying sync {sourceFileName} to {destinationFileName}...");
                    sourceFile.CopyTo(destinationFile);
                    Console.WriteLine("Done");
                }
            }
        }


правильно ли я понимаю что копирование из стрима в стрим бесполезно делать асинхроно, так как на мой взгляд насилование процессора ну такое? посмотрел в кишках там вообще не пахнет асинхроном ..ощущение что идет эмуляция асинхронщины через труд пул как следствие локи и всплески процессора. При CopyTo процессор в тишине и покое.
буду признателен если кто то разжует чуть больше моих изысканий.
...
Рейтинг: 0 / 0
Stream CopyToAsync vs CopyTo
    #39947782
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сталкивался с аналогичной проблемой, хотя и с другой стороны, но, похоже на твой кейс
21742747
...
Рейтинг: 0 / 0
Stream CopyToAsync vs CopyTo
    #39947821
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu
правильно ли я понимаю что копирование из стрима в стрим бесполезно делать асинхроно


нет, не правильно.
это ж зависит от реализации :)

где ловишь проблему? версия фреймворка?
...
Рейтинг: 0 / 0
Stream CopyToAsync vs CopyTo
    #39947865
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt

это ж зависит от реализации :)
где ловишь проблему? версия фреймворка?

ну ловлю я проблему библе что делает сохранение/скачивание в с3 хранилище файлов по 50-100гб, увидел по мониторнигу дикие всплески процессора. препарировал библу и увидел что там копируют или вычитываю из потока httpclient в filestream, чтоб не алоцировать память. поэтому сделал демку код с обычным копирование файлов на локале и подвердило. ф 4.7.1 и нет кор 2.1 на них я тестировал
под рукой нет щас dotTrace так что скрины из вижлы copy copyasync где я внутри библы меняю CopyToAsync на CopyTo
с забикса скрины я кидать не буду, собственно где я и заметил всплески на пустом машине тестовой для ввода микросервиса по отправке в с3.

опиши если не сложно в каких реализаций оно будет верным. ибо мой мир что все io операции делать через асинк рушится
...
Рейтинг: 0 / 0
Stream CopyToAsync vs CopyTo
    #39947874
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Я сталкивался с аналогичной проблемой, хотя и с другой стороны, но, похоже на твой кейс
21742747

да примерно теже степи, у тебя время большое но интересно там cpu также скакал или нет
...
Рейтинг: 0 / 0
Stream CopyToAsync vs CopyTo
    #39947887
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

Если какая-то левая либа сделана через анал, то при чем тут сам async.
...
Рейтинг: 0 / 0
Stream CopyToAsync vs CopyTo
    #39947889
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
handmadeFromRu,

Если какая-то левая либа сделана через анал, то при чем тут сам async.

эм ну я ж сделал тестовый код сверху без либы....значит весь фрейм анал?
...
Рейтинг: 0 / 0
Stream CopyToAsync vs CopyTo
    #39947950
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu
ну ловлю я проблему библе что делает сохранение/скачивание в с3 хранилище файлов по 50-100гб, увидел по мониторнигу дикие всплески процессора. препарировал библу и увидел что там копируют или вычитываю из потока httpclient в filestream, чтоб не алоцировать память. поэтому сделал демку код с обычным копирование файлов на локале и подвердило. ф 4.7.1 и нет кор 2.1 на них я тестировал
под рукой нет щас dotTrace так что скрины из вижлы copy copyasync где я внутри библы меняю CopyToAsync на CopyTo
с забикса скрины я кидать не буду, собственно где я и заметил всплески на пустом машине тестовой для ввода микросервиса по отправке в с3.

опиши если не сложно в каких реализаций оно будет верным. ибо мой мир что все io операции делать через асинк рушится


httpclient и filestream нативные? там ещё буферы нужно настраивать, неправильные буферы приведут к нагрузке на GC, а это приведёт к тормозам.

в общем, лучше будет, если воспроизвести ситуацию в маленьком демо проекте, и давайте её препариуем.

навскидку, с подобным не сталкивался (не считая проблем неправильной настройки буфера).
...
Рейтинг: 0 / 0
Stream CopyToAsync vs CopyTo
    #39947977
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt

httpclient и filestream нативные? там ещё буферы нужно настраивать, неправильные буферы приведут к нагрузке на GC, а это приведёт к тормозам.

в общем, лучше будет, если воспроизвести ситуацию в маленьком демо проекте, и давайте её препариуем.

навскидку, с подобным не сталкивался (не считая проблем неправильной настройки буфера).


так я ж скинул куски кода который можно запустить на локале даже без httpclient .
на входе имена файлов ..копируй файл побольше и смотри как процессор играет.
щас перепроверили на кор нет 3.1 тоже есть всплески но они ниже чем на фреймворке.
буфер там 81920 подефолту судя по сорсам stream
у меня тут вопросы к File.OpenRead пошли..там внутри вызывается filestream у которого в конструкторе async = false ..но даже установив руками его в true я не заметил что процессор меньше нагружается
...
Рейтинг: 0 / 0
Stream CopyToAsync vs CopyTo
    #39947992
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

а если снять дамп и посмотреть, чем потоки заняты?
...
Рейтинг: 0 / 0
Stream CopyToAsync vs CopyTo
    #39948066
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух
handmadeFromRu,

а если снять дамп и посмотреть, чем потоки заняты?

ну я тут не силен если честно, судя по windbg с асинком появляется тридпул с семафорслимом
http://joxi.ru/KAxddo8FZezONA
хотя по факту все уходит на винапи
...
Рейтинг: 0 / 0
Stream CopyToAsync vs CopyTo
    #39948207
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu
следствие локи и всплески процессора.

При локах ЦПУ наоборот простаивать должен. Так-то в однопоточном консольном приложении выгоды от асинхронности ты никакой и не увидишь - смысл-то её не в том чтобы "ЦПУ меньше грузился", а чтобы что-то еще можно было делать, пока асин операция выполняется. У тебя вообще приложение не GUI случайно? Потому что тогда ConfigureAsync(false) следует делать, там где можно.
...
Рейтинг: 0 / 0
Stream CopyToAsync vs CopyTo
    #39948279
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat

При локах ЦПУ наоборот простаивать должен. Так-то в однопоточном консольном приложении выгоды от асинхронности ты никакой и не увидишь - смысл-то её не в том чтобы "ЦПУ меньше грузился", а чтобы что-то еще можно было делать, пока асин операция выполняется. У тебя вообще приложение не GUI случайно? Потому что тогда ConfigureAsync(false) следует делать, там где можно.

асп кор нет приложение
демку делал на консоли.
да на со тоже самое пишут мол цпу не важен и асинк позволяет скалироваться

тот не ловкий момент когда ты думал что знаешь как работает до конца, но оказалось что нет, не смотря что вчера перечитал все что мог и с дотнекса спикеров глянул.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Stream CopyToAsync vs CopyTo
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]