Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Stream CopyToAsync vs CopyTo / 13 сообщений из 13, страница 1 из 1
15.04.2020, 22:21
    #39947780
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Stream CopyToAsync vs CopyTo
мелкий диспут неожиданный. я раньше не проверял, но тут не давно в глаза бросилось 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
15.04.2020, 22:27
    #39947782
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Stream CopyToAsync vs CopyTo
Я сталкивался с аналогичной проблемой, хотя и с другой стороны, но, похоже на твой кейс
21742747
...
Рейтинг: 0 / 0
16.04.2020, 00:43
    #39947821
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Stream CopyToAsync vs CopyTo
handmadeFromRu
правильно ли я понимаю что копирование из стрима в стрим бесполезно делать асинхроно


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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


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