Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.139.107.241] |
|
Страницы: (3) 1 2 [3] все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
Цитата Олег М @ Лучше сосредоточиться на нём, а когда заработает как часы, тогда уже можно заняться и деталями. Полностью согласен.На данный момент я и копирование не делаю.Занимаюсь только настройкой поиска и потоков. Добавлено Нет,не встречал.Но встречал программку,которая делала что-то подобное и делала это очень быстро,и потоков было с лихвой. Вот только кода этой программки я не видел,да и её самой у меня уже нет. Случайно наткнулся,не думал на тот момент,что сам заинтересуюсь. Всё,что я пока делал,работает очень медленно. Всё,что я знаю о той проге, это то,что она работает с большим количеством потоков и с WINAPI. Пробовал выполнять копирование при помощи Си (FILE*) и WINAPI(CreateFile),заметил,что WINAPI работает намного быстрее. Думаю я на верном пути. Добавлено Цитата JoeUser @ Берем системный диск любой современной версии винды и видим сразу же в корне соединение "User" -> "Documents and Settings": Если я запускаю программу не от имени админа,она эти папки даже не видит,а есть и такие,для которых и вовсе прав админа не достаточно, нужно что-то вроде привилегий SE_BACKUP_NAME Но в моём случае,это не не нужно и даже вредно. |
Сообщ.
#32
,
|
|
|
Цитата Sherman @ и потоков было с лихвой Олег М в своих предыдущих сообщения был во многом прав по поводу потоков. А мое резюме - ты люто и бешено зациклен на многопоточности. Народная мудрость гласит "все хорошо в меру". И тут это как ни кстати - актуально! Пример. Берем восми-ядерный проц. И запускаем сборку Цэ++ проекта. Сколько потоков выделить на сборку? Скрытый текст Тут сикретик. И мой ответ тамошний - в топах. Народ кагбэ одобяет. А вот теперь подумай, у тебя простой скан диска. Сколько операций твой дисковый массив сможет сделать одновременно? Универсального ответа нет. Если это честный хардварный рэйд - он закэширует твои вызовы хорошо, но все равно выполнит их последовательно или псевдо-параллельно. Если это мамковый fake-рэйд, сделает тоже самое, но плюс к тому загрузит камень, к гадалке не ходи! Единственный вменяемый вариант - когда идет одновременный скан n-независимых дисков, сидящих на разных интерфейсах. Резюме 1) Если какого-то трудного пересчета нет - не делай потоков больше, чем количество отдельных физических носителей 2) Не верю что 2-х поточная прога на 2-х винтовом рэйде сильно победит однопоточную (если вообще сможет) и не уступит 3-х поточной ЗЫ: Если захочешь узнать три Закона Будды - пиши в личку. Добавлено Цитата Sherman @ Но в моём случае,это не не нужно и даже вредно. Тебе виднее для твоего случая. Без вопросов |
Сообщ.
#33
,
|
|
|
Цитата JoeUser @ Цитата Олег М @ Все эти хардлинки с атрибутами это вторичная проблема, не факт, что с ней столкнёшься. Не правда твоя! Берем системный диск любой современной версии винды и видим сразу же в корне соединение "User" -> "Documents and Settings": Не совсем понятно, о чём дискуссия.. У этой директории просто установлены атрибуты: FILE_ATTRIBUTE_TEMPORARY | FILE_ATTRIBUTE_OFFLINE | FILE_ATTRIBUTE_REPARSE_POINT (и конечно FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM) Если захочется специально проигнорировать объект с такими атрибутами это можно сделать. И в результате игнорировать такую директорию для дальнейших действий. Если поиск не фильтровать по атрибутам, директория будет найдена. |
Сообщ.
#34
,
|
|
|
ЫукпШ, да я к тому - что файловый носитель уже давно ушел от древовидной структуры.
И только упоротый гик пытается делать обход "дерева", не взирая на все увещевания. Я кончил. |
Сообщ.
#35
,
|
|
|
Цитата ЫукпШ @ В отношении FILE_ATTRIBUTE_REPARSE_POINT мнение может быть двояким. С одной стороны, они являются ссылками на другие объекты, которые либо находятся вне рассматриваемой области тома, а то и вообще другого тома, либо и без учёта этой ссылки тоже будут обработаны. С другой же стороны, не зря же эта ссылка тут расположена, значит кому-то было нужно, чтобы та, другая, область (другого) тома вроде бы считалась как будто бы находящаяся тут. Так что этот аспект не абсолютен и вполне себе обсуждаем, и наличие этого атрибута у объекта целиком и полностью зависит от пользователя. Даже не автора программы. JoeUser же говорил о другом его аспекте: этот атрибут может иметь объект, ссылающийся на одного из своих родителей. И это уже куда серьёзней, так как его игнор ведёт к бесконечной петле. Попробуй его не игнорировать и при этом не допустить циклов. Это не так-то просто запрограммировать.Если захочется специально проигнорировать объект с такими атрибутами ... С другими атрибутами другая петрушка. FILE_ATTRIBUTE_TEMPORARY выставляется приложениями для объектов, которые являются порождениями реализаций их внутренних алгоритмов. Такие объекты используются ими временно, для внутренних нужд и не содержат полезной для пользователя информации. Игнорировать такие объекты сам бог велел, ибо зачем обрабатывать мусор? FILE_ATTRIBUTE_OFFLINE говорит о том, что объект в данный момент недоступен, поэтому его обработка непосредственно сейчас может оказаться невозможной или потребовать от пользователя телодвижений, т.е. неких ручных операций, для обеспечения доступа к нему. Вряд ли пользователя это обрадует, тем более, что он всё равно, зная, что запускает приложения по обработке данных, должен был бы заранее озаботиться предоставлением доступа ко всем таким объектам, и тогда этот атрибут был бы с них уже снят. Да, он может об этом не подумать или просто забыть о парочке таких, однако останов программы, запущенной на ночь для длительной обработки в нерабочее время, в паузу поутру может обернуться неслабыми матюгами. Из-за одного объекта не были обработаны куча других, вполне нормальных. Поэтому будет хорошей практикой все такие объекты обходить, чтоб не тормозить себе работу, однако включить их отчёт о проделанной работе как о непроделанной. |
Сообщ.
#36
,
|
|
|
Цитата Sherman @ Всё,что я пока делал,работает очень медленно. Всё,что я знаю о той проге, это то,что она работает с большим количеством потоков и с WINAPI. Думаю, первое вытекает из второго. Скорее всего, она использует асинхронный ввод-вывод, виндовский, а тот, в свою очередь - пул потоков. |
Сообщ.
#37
,
|
|
|
Цитата Олег М @ Скорее всего, она использует асинхронный ввод-вывод, виндовский, а тот, в свою очередь - пул потоков. OVERLAPPED это то что мне нужно? Вчера только наткнулся на эту "фишку". Переодически веду всякие заметки по программированию в блокноте.Нашёл и о этой программке заметку. Она использовала CreateFileW,CreateFileA,CreateFileMappingA,MapViewOfFile,UnmapViewOfFile,SetFilePointerEx,WriteFile,GlobalAlloc,GlobalFree,RtlZeroMemory,CreateThread, По крайней мере,это было в листинге дис-ассамблера. Здесь не случайно нет ReadFile. По всей видимости,она проецировала файл(карту) в виртуальной памяти,читала карту блоками и писала в другой. Если это делать,как вы писали,разделить эти процедуры по разным потокам,получается,нужно в одном потоке искать файлы,во-втором проецировать файл и передавать в третий хедл CreateFileMappingA,в котором,в свою очередь,читать карту(MapViewOfFile) и писать в файл? |
Сообщ.
#38
,
|
|
|
Цитата Sherman @ OVERLAPPED это то что мне нужно? Нет. Сначала тебе нужно сделать то что я тебе рекомендовал, это самое простое, с чего надо начинать. Проецирование и т.п. - это следующий шаг, не стоит перескакивать. |