|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum представим что у нас первая итерация вызова calc_directory_size и указанный каталог не существует, получается что вместо этой проверки достанется по мозгам менеджеру памяти, который будет вынужен сначала построить нам правильную строку для FindFirstFile в utils::findfile_path_builder. То есть вся эта работа будет проведена в пустую, а если принять во внимание, что таких запросов ваша служба может получить сразу несколько или параллельно выполнять что-то тяжелое с памятью, то такое дерганиье менеджера памяти автоматически тормозит на аллокации все потоки в службе. Предлагаю отказаться от динамической памяти при построении пути к файлам. Вам хватит одного массива "char[64 кбайт]". ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:40 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Он нам в топике ненужен Хотя, с другой стороны, если отдельный том вам не нравится, то существует виртуальный диск, который легко создать и перемонтировать с гарантированным сбросом кэша. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:42 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Cerebrum, нам нужны выводы. Стало меньше. Что повлияло. Убирание exist? ИЛи ребут. Нужно еще хотя-бы 2 измерения чтоб устаканить величину. все написал. повлияло удаление проверки как и предлогали перезагрузка сервера выполнена сделаю позже, обеденный перерыв закончился ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:47 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petravПредлагаю отказаться от динамической памяти при построении пути к файлам Пока в топе функций не светятся new/delete этим можно не заморачиваться. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:47 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov mayton Он нам в топике ненужен Хотя, с другой стороны, если отдельный том вам не нравится, то существует виртуальный диск, который легко создать и перемонтировать с гарантированным сбросом кэша. Вася яж не спорю. Можно. Просто я предлагаю эксперимент который любой может провести на ноуте. А ты предлагаешь эксперимент которые требует предусловия которые не у всех есть. Требует наличия свободного места. Требует выполнения админских действий которые не все хотят делать. Да и я не советую. Просто последствия от ошибочных действий с диском - очень печальные. И иногда не восстанавливаются. И я в топике не беру ответсвенность за такое. Хочешь - дирижируй шринком. Дай всем инструкции. Я не хочу. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:47 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum, Кстати, а зачем вы вообще в "utils::findfile_path_builder" строите полный путь к файлу? Не эффективнее ли будет менять текущий каталог? Ведь вы же заставляете ОС каждый раз пройтись по полному пути от корня. Или поскольку это многопользовательский сервис, то делать этого нельзя? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:49 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petrav Вам хватит одного массива "char[64 кбайт]". как вариант, но пока мест выделения памяти довольно много и придется много где поменять логику, что скажется отрицательно, с точки зрения читабельности кода но с производительностью всегда так, либо код понятный и медленный, либо черт ногу сломит и все более быстро ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:51 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Пока в топе функций не светятся new/delete этим можно не заморачиваться. +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:51 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravПредлагаю отказаться от динамической памяти при построении пути к файлам Пока в топе функций не светятся new/delete этим можно не заморачиваться. Ну человек почему-то переживал по поводу менеджера памяти. Если я правильно понял его. В принципе сотни тысяч аллокаций... если от них элементарно отказаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:55 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravПредлагаю отказаться от динамической памяти при построении пути к файлам Пока в топе функций не светятся new/delete этим можно не заморачиваться. Судя по профилировщику мы долго ожидаем функцию FindFirst. Это получение итератора на список файлов в каталоге NTFS. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:55 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petrav Кстати, а зачем вы вообще в "utils::findfile_path_builder" строите полный путь к файлу? это требование FindFirstFile, ей нужна маска, а не просто путь, тк она вся из себя гибкая и универсальная. Когда я строю путь, по нему от корня никто не проходит, выполняется лишь декорирование пути под маску. Использование одной и той же переменной в качестве хранилища памяти строки было бы предпочтительно, но для дальнейших итераций путь-маска сгенерированная в данной функции не подходит для последующих итераций. Его приходится разбирать и собирать заново. Это мы с вами знаем что нам здесь можно было бы подшаманить, но я стараюсь писать более менее универсальный код, который бы мог использоваться в разных местах, отсюда неизбежно чем-то приходится жертвовать ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:56 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Судя по профилировщику мы долго ожидаем функцию FindFirst. Это получение итератора на список файлов в каталоге NTFS. все верно, данная ф-ция устроена в Windows так, что она делает упреждающее чтение всегда, то есть всегда забивает некий кэш списком файлов, чтобы десять раз не бегать. Именно об этом и говорят оптимизирующий флаги, которые я использовал в Ex версии. Условно я разрешил ОС использовать больше память под кэш упреждающего чтения ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:59 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petravНе эффективнее ли будет менять текущий каталог? Сугубо без разницы. Но побочные эффекты злее. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:04 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
maytonСудя по профилировщику мы долго ожидаем функцию FindFirst. Это получение итератора на список файлов в каталоге NTFS. Если учесть, что NTFS построена в виде B-tree, этот итератор нетривиален, как и его получение. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:11 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Если мы дерево каталогов разрежем на уровень 1 и все остальные 2,3,4,...e.t.c то у нас получается ключ группы и его значения. Дальше - можно попробовать map-reduce на этом дереве. Но хотя-бы в 2 потока. Почему в 2 потока? Ну... диск и так нагружен. Можем только выиграть на процессорных операциях которые делают всякую логику типа там хождения по структуре B-дерева каталога и проверку ACL. Ведь формула подсчета size директорий идеально ложиться на шаблон map-reduce. Ну что господа сишники? Осилим мы такой подход? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:12 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum, >но с производительностью всегда так, либо код понятный и медленный, либо черт ногу сломит и все более быстро == да)) Смотря что надо _прикладному коду_ выше уровнем. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:13 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravНе эффективнее ли будет менять текущий каталог? Сугубо без разницы. Но побочные эффекты злее. Но почему? Смотрите: мы в FindFirst() передаём полный путь и эта фигня бежит по всему дереву, по каждой подпапке, проверяет существование и права доступа. А если мы изменим текущий каталог, то мы работаем в текущей песочнице. Плюс динамические строки отваливаются вообще элементарно. Сотни тысяч операций не выполняются. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:17 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petravА если мы изменим текущий каталог, то мы работаем в текущей песочнице. Система, получив относительный путь в FindFirst, переводит его в абсолютный и задача сводится к той, что выше. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:26 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Система, получив относительный путь в FindFirst, переводит его в абсолютный и задача сводится к той, что выше. Разумно поручить системе всё, что упрощает прикладной код, пока это укладывается в требования эффективности? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:31 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravА если мы изменим текущий каталог, то мы работаем в текущей песочнице. Система, получив относительный путь в FindFirst, переводит его в абсолютный и задача сводится к той, что выше. Почему вы так решили? Мне кажется это было бы бессмысленным. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:36 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum ... В целом, если сравнивать мою наивную реализацию на FindFirst/FindNextFile и ту реализацию, которая используется в Explorer'e (открыть каталог, правой кнопкой мыши, посмотреть свойства), то создается впечатление, что Проводник не использует FindFirst/NextFile API, либо использует их как-то очень хитро, потому что производительность его рассчетов значительно превышает производительность указанных функций в моей реализации (проводил как-то анализ на "холодных" данных/кэше). ... как вариант, можно натравить IDA на cmd и посмотреть как там сделано. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:59 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petravПочему вы так решили? потому что это написано в документации работы относительных путей. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 17:20 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Ну и дополнительно на это намекает 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 17:34 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravПочему вы так решили? потому что это написано в документации работы относительных путей. Хотелось бы, конечно, ссылочку. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 21:07 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petravХотелось бы, конечно, ссылочку. Так почему бы не спросить у гугля? Он честно выдаёт https://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats#path-normalization Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 21:34 |
|
|
start [/forum/topic.php?fid=57&msg=39997346&tid=2017328]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 263ms |
total: | 408ms |
0 / 0 |