powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / папка это файл?
25 сообщений из 230, страница 8 из 10
папка это файл?
    #39997344
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrum

представим что у нас первая итерация вызова calc_directory_size и указанный каталог не существует, получается что вместо этой проверки достанется по мозгам менеджеру памяти, который будет вынужен сначала построить нам правильную строку для FindFirstFile в utils::findfile_path_builder. То есть вся эта работа будет проведена в пустую, а если принять во внимание, что таких запросов ваша служба может получить сразу несколько или параллельно выполнять что-то тяжелое с памятью, то такое дерганиье менеджера памяти автоматически тормозит на аллокации все потоки в службе.

Предлагаю отказаться от динамической памяти при построении пути к файлам. Вам хватит одного массива "char[64 кбайт]".
...
Рейтинг: 0 / 0
папка это файл?
    #39997346
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Он нам в топике ненужен
А кто вам это сказал?
Хотя, с другой стороны, если отдельный том вам не нравится, то существует виртуальный диск, который легко создать и перемонтировать с гарантированным сбросом кэша.
...
Рейтинг: 0 / 0
папка это файл?
    #39997351
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Cerebrum, нам нужны выводы. Стало меньше. Что повлияло. Убирание exist? ИЛи ребут.
Нужно еще хотя-бы 2 измерения чтоб устаканить величину.

все написал.
повлияло удаление проверки как и предлогали
перезагрузка сервера выполнена

сделаю позже, обеденный перерыв закончился
...
Рейтинг: 0 / 0
папка это файл?
    #39997352
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravПредлагаю отказаться от динамической памяти при построении пути к файлам

Пока в топе функций не светятся new/delete этим можно не заморачиваться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
папка это файл?
    #39997354
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
mayton
Он нам в топике ненужен
А кто вам это сказал?
Хотя, с другой стороны, если отдельный том вам не нравится, то существует виртуальный диск, который легко создать и перемонтировать с гарантированным сбросом кэша.

Вася яж не спорю. Можно.

Просто я предлагаю эксперимент который любой может провести на ноуте. А ты предлагаешь
эксперимент которые требует предусловия которые не у всех есть. Требует наличия свободного
места. Требует выполнения админских действий которые не все хотят делать. Да и я не советую.
Просто последствия от ошибочных действий с диском - очень печальные. И иногда не восстанавливаются.

И я в топике не беру ответсвенность за такое. Хочешь - дирижируй шринком. Дай всем инструкции. Я не хочу.
...
Рейтинг: 0 / 0
папка это файл?
    #39997356
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrum,

Кстати, а зачем вы вообще в "utils::findfile_path_builder" строите полный путь к файлу? Не эффективнее ли будет менять текущий каталог? Ведь вы же заставляете ОС каждый раз пройтись по полному пути от корня.

Или поскольку это многопользовательский сервис, то делать этого нельзя?
...
Рейтинг: 0 / 0
папка это файл?
    #39997358
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Вам хватит одного массива "char[64 кбайт]".

как вариант, но пока мест выделения памяти довольно много и придется много где поменять логику, что скажется отрицательно, с точки зрения читабельности кода
но с производительностью всегда так, либо код понятный и медленный, либо черт ногу сломит и все более быстро
...
Рейтинг: 0 / 0
папка это файл?
    #39997359
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Пока в топе функций не светятся new/delete этим можно не заморачиваться.

+1
...
Рейтинг: 0 / 0
папка это файл?
    #39997361
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravПредлагаю отказаться от динамической памяти при построении пути к файлам

Пока в топе функций не светятся new/delete этим можно не заморачиваться.

Ну человек почему-то переживал по поводу менеджера памяти. Если я правильно понял его. В принципе сотни тысяч аллокаций... если от них элементарно отказаться.
...
Рейтинг: 0 / 0
папка это файл?
    #39997362
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravПредлагаю отказаться от динамической памяти при построении пути к файлам

Пока в топе функций не светятся new/delete этим можно не заморачиваться.

Судя по профилировщику мы долго ожидаем функцию FindFirst. Это получение итератора
на список файлов в каталоге NTFS.
...
Рейтинг: 0 / 0
папка это файл?
    #39997364
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Кстати, а зачем вы вообще в "utils::findfile_path_builder" строите полный путь к файлу?

это требование FindFirstFile, ей нужна маска, а не просто путь, тк она вся из себя гибкая и универсальная.
Когда я строю путь, по нему от корня никто не проходит, выполняется лишь декорирование пути под маску.

Использование одной и той же переменной в качестве хранилища памяти строки было бы предпочтительно, но для дальнейших итераций путь-маска сгенерированная в данной функции не подходит для последующих итераций. Его приходится разбирать и собирать заново.

Это мы с вами знаем что нам здесь можно было бы подшаманить, но я стараюсь писать более менее универсальный код, который бы мог использоваться в разных местах, отсюда неизбежно чем-то приходится жертвовать
...
Рейтинг: 0 / 0
папка это файл?
    #39997366
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Судя по профилировщику мы долго ожидаем функцию FindFirst. Это получение итератора
на список файлов в каталоге NTFS.

все верно, данная ф-ция устроена в Windows так, что она делает упреждающее чтение всегда, то есть всегда забивает некий кэш списком файлов, чтобы десять раз не бегать. Именно об этом и говорят оптимизирующий флаги, которые я использовал в Ex версии. Условно я разрешил ОС использовать больше память под кэш упреждающего чтения
...
Рейтинг: 0 / 0
папка это файл?
    #39997369
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravНе эффективнее ли будет менять текущий каталог?

Сугубо без разницы. Но побочные эффекты злее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
папка это файл?
    #39997374
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСудя по профилировщику мы долго ожидаем функцию FindFirst. Это получение итератора
на список файлов в каталоге NTFS.

Если учесть, что NTFS построена в виде B-tree, этот итератор нетривиален, как и его получение.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
папка это файл?
    #39997375
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если мы дерево каталогов разрежем на уровень 1 и все остальные 2,3,4,...e.t.c
то у нас получается ключ группы и его значения.

Дальше - можно попробовать map-reduce на этом дереве. Но хотя-бы в 2 потока.
Почему в 2 потока? Ну... диск и так нагружен. Можем только выиграть на процессорных
операциях которые делают всякую логику типа там хождения по структуре B-дерева
каталога и проверку ACL.

Ведь формула подсчета size директорий идеально ложиться на шаблон map-reduce.

Ну что господа сишники? Осилим мы такой подход?
...
Рейтинг: 0 / 0
папка это файл?
    #39997376
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrum,

>но с производительностью всегда так, либо код понятный и медленный, либо черт ногу сломит и все более быстро
== да))
Смотря что надо _прикладному коду_ выше уровнем.
...
Рейтинг: 0 / 0
папка это файл?
    #39997378
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravНе эффективнее ли будет менять текущий каталог?

Сугубо без разницы. Но побочные эффекты злее.

Но почему? Смотрите: мы в FindFirst() передаём полный путь и эта фигня бежит по всему дереву, по каждой подпапке, проверяет существование и права доступа.

А если мы изменим текущий каталог, то мы работаем в текущей песочнице. Плюс динамические строки отваливаются вообще элементарно.

Сотни тысяч операций не выполняются.
...
Рейтинг: 0 / 0
папка это файл?
    #39997383
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravА если мы изменим текущий каталог, то мы работаем в текущей песочнице.

Система, получив относительный путь в FindFirst, переводит его в абсолютный и задача
сводится к той, что выше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
папка это файл?
    #39997385
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Система, получив относительный путь в FindFirst, переводит его в абсолютный и задача сводится к той, что выше.
Система может выполнить эту задачу эффективнее прикладного кода.
Разумно поручить системе всё, что упрощает прикладной код, пока это укладывается в требования эффективности?
...
Рейтинг: 0 / 0
папка это файл?
    #39997387
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravА если мы изменим текущий каталог, то мы работаем в текущей песочнице.

Система, получив относительный путь в FindFirst, переводит его в абсолютный и задача
сводится к той, что выше.

Почему вы так решили? Мне кажется это было бы бессмысленным.
...
Рейтинг: 0 / 0
папка это файл?
    #39997398
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrum
...
В целом, если сравнивать мою наивную реализацию на FindFirst/FindNextFile и ту реализацию, которая используется в Explorer'e (открыть каталог, правой кнопкой мыши, посмотреть свойства), то создается впечатление, что Проводник не использует FindFirst/NextFile API, либо использует их как-то очень хитро, потому что производительность его рассчетов значительно превышает производительность указанных функций в моей реализации (проводил как-то анализ на "холодных" данных/кэше).
...
dir из cmd.exe быстро работает?

как вариант, можно натравить IDA на cmd и посмотреть как там сделано.
...
Рейтинг: 0 / 0
папка это файл?
    #39997405
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravПочему вы так решили?

потому что это написано в документации работы относительных путей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
папка это файл?
    #39997410
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и дополнительно на это намекает
MSDNIf the string ends with a wildcard, period (.), or directory name, the user
must have access permissions to the root and all subdirectories on the path.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
папка это файл?
    #39997468
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravПочему вы так решили?

потому что это написано в документации работы относительных путей.

Хотелось бы, конечно, ссылочку.
...
Рейтинг: 0 / 0
папка это файл?
    #39997473
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravХотелось бы, конечно, ссылочку.

Так почему бы не спросить у гугля? Он честно выдаёт
https://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats#path-normalization
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 230, страница 8 из 10
Форумы / C++ [игнор отключен] [закрыт для гостей] / папка это файл?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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