На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
Страницы: (3) 1 2 [3]  все  ( Перейти к последнему сообщению )  
> Рекурсивный поиск файлов заполняет не выгруженный пул памяти Си WINAPI , Рекурсивный поиск файлов заполняет не выгруженный пул памяти Си WINAPI
    Цитата Олег М @
    Лучше сосредоточиться на нём, а когда заработает как часы, тогда уже можно заняться и деталями.

    Полностью согласен.На данный момент я и копирование не делаю.Занимаюсь только настройкой поиска и потоков.

    Добавлено
    Цитата Олег М @
    А что встречал - как на каждый чих зафигачить поток, авось система сама разберётся?

    Нет,не встречал.Но встречал программку,которая делала что-то подобное и делала это очень быстро,и потоков было с лихвой.
    Вот только кода этой программки я не видел,да и её самой у меня уже нет.
    Случайно наткнулся,не думал на тот момент,что сам заинтересуюсь.
    Всё,что я пока делал,работает очень медленно.
    Всё,что я знаю о той проге, это то,что она работает с большим количеством потоков и с WINAPI.
    Пробовал выполнять копирование при помощи Си (FILE*) и WINAPI(CreateFile),заметил,что WINAPI работает намного быстрее.
    Думаю я на верном пути.

    Добавлено
    Цитата JoeUser @
    Берем системный диск любой современной версии винды и видим сразу же в корне соединение "User" -> "Documents and Settings":

    Если я запускаю программу не от имени админа,она эти папки даже не видит,а есть и такие,для которых и вовсе прав админа не достаточно,
    нужно что-то вроде привилегий SE_BACKUP_NAME
    Но в моём случае,это не не нужно и даже вредно.
      Цитата Sherman @
      и потоков было с лихвой

      Олег М в своих предыдущих сообщения был во многом прав по поводу потоков. А мое резюме - ты люто и бешено зациклен на многопоточности. Народная мудрость гласит "все хорошо в меру". И тут это как ни кстати - актуально!

      Пример. Берем восми-ядерный проц. И запускаем сборку Цэ++ проекта. Сколько потоков выделить на сборку?
      Скрытый текст
      Тут сикретик. И мой ответ тамошний - в топах. Народ кагбэ одобяет.

      А вот теперь подумай, у тебя простой скан диска. Сколько операций твой дисковый массив сможет сделать одновременно? Универсального ответа нет. Если это честный хардварный рэйд - он закэширует твои вызовы хорошо, но все равно выполнит их последовательно или псевдо-параллельно. Если это мамковый fake-рэйд, сделает тоже самое, но плюс к тому загрузит камень, к гадалке не ходи! Единственный вменяемый вариант - когда идет одновременный скан n-независимых дисков, сидящих на разных интерфейсах.

      Резюме

      1) Если какого-то трудного пересчета нет - не делай потоков больше, чем количество отдельных физических носителей
      2) Не верю что 2-х поточная прога на 2-х винтовом рэйде сильно победит однопоточную (если вообще сможет) и не уступит 3-х поточной

      ЗЫ: Если захочешь узнать три Закона Будды - пиши в личку.

      Добавлено
      Цитата Sherman @
      Но в моём случае,это не не нужно и даже вредно.

      Тебе виднее для твоего случая. Без вопросов :lol:
        Цитата JoeUser @
        Цитата Олег М @
        Все эти хардлинки с атрибутами это вторичная проблема, не факт, что с ней столкнёшься.

        Не правда твоя! :)

        Берем системный диск любой современной версии винды и видим сразу же в корне соединение "User" -> "Documents and Settings":

        Не совсем понятно, о чём дискуссия..
        У этой директории просто установлены атрибуты:
        FILE_ATTRIBUTE_TEMPORARY | FILE_ATTRIBUTE_OFFLINE | FILE_ATTRIBUTE_REPARSE_POINT
        (и конечно FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)
        Если захочется специально проигнорировать объект с такими атрибутами
        это можно сделать. И в результате игнорировать такую директорию для дальнейших действий.
        Если поиск не фильтровать по атрибутам, директория будет найдена.
        Сообщение отредактировано: ЫукпШ -
          ЫукпШ, да я к тому - что файловый носитель уже давно ушел от древовидной структуры.
          И только упоротый гик пытается делать обход "дерева", не взирая на все увещевания.
          Я кончил.
            Цитата ЫукпШ @
            Если захочется специально проигнорировать объект с такими атрибутами ...
            В отношении FILE_ATTRIBUTE_REPARSE_POINT мнение может быть двояким. С одной стороны, они являются ссылками на другие объекты, которые либо находятся вне рассматриваемой области тома, а то и вообще другого тома, либо и без учёта этой ссылки тоже будут обработаны. С другой же стороны, не зря же эта ссылка тут расположена, значит кому-то было нужно, чтобы та, другая, область (другого) тома вроде бы считалась как будто бы находящаяся тут. Так что этот аспект не абсолютен и вполне себе обсуждаем, и наличие этого атрибута у объекта целиком и полностью зависит от пользователя. Даже не автора программы. JoeUser же говорил о другом его аспекте: этот атрибут может иметь объект, ссылающийся на одного из своих родителей. И это уже куда серьёзней, так как его игнор ведёт к бесконечной петле. Попробуй его не игнорировать и при этом не допустить циклов. Это не так-то просто запрограммировать.
            С другими атрибутами другая петрушка. FILE_ATTRIBUTE_TEMPORARY выставляется приложениями для объектов, которые являются порождениями реализаций их внутренних алгоритмов. Такие объекты используются ими временно, для внутренних нужд и не содержат полезной для пользователя информации. Игнорировать такие объекты сам бог велел, ибо зачем обрабатывать мусор?
            FILE_ATTRIBUTE_OFFLINE говорит о том, что объект в данный момент недоступен, поэтому его обработка непосредственно сейчас может оказаться невозможной или потребовать от пользователя телодвижений, т.е. неких ручных операций, для обеспечения доступа к нему. Вряд ли пользователя это обрадует, тем более, что он всё равно, зная, что запускает приложения по обработке данных, должен был бы заранее озаботиться предоставлением доступа ко всем таким объектам, и тогда этот атрибут был бы с них уже снят. Да, он может об этом не подумать или просто забыть о парочке таких, однако останов программы, запущенной на ночь для длительной обработки в нерабочее время, в паузу поутру может обернуться неслабыми матюгами. Из-за одного объекта не были обработаны куча других, вполне нормальных. Поэтому будет хорошей практикой все такие объекты обходить, чтоб не тормозить себе работу, однако включить их отчёт о проделанной работе как о непроделанной.
              Цитата Sherman @
              Всё,что я пока делал,работает очень медленно.
              Всё,что я знаю о той проге, это то,что она работает с большим количеством потоков и с WINAPI.

              Думаю, первое вытекает из второго.
              Скорее всего, она использует асинхронный ввод-вывод, виндовский, а тот, в свою очередь - пул потоков.
                Цитата Олег М @
                Скорее всего, она использует асинхронный ввод-вывод, виндовский, а тот, в свою очередь - пул потоков.

                OVERLAPPED это то что мне нужно?
                Вчера только наткнулся на эту "фишку".
                Переодически веду всякие заметки по программированию в блокноте.Нашёл и о этой программке заметку.
                Она использовала CreateFileW,CreateFileA,CreateFileMappingA,MapViewOfFile,UnmapViewOfFile,SetFilePointerEx,WriteFile,GlobalAlloc,GlobalFree,RtlZeroMemory,CreateThread,
                По крайней мере,это было в листинге дис-ассамблера.
                Здесь не случайно нет ReadFile.
                По всей видимости,она проецировала файл(карту) в виртуальной памяти,читала карту блоками и писала в другой.
                Если это делать,как вы писали,разделить эти процедуры по разным потокам,получается,нужно в одном потоке искать файлы,во-втором проецировать
                файл и передавать в третий хедл CreateFileMappingA,в котором,в свою очередь,читать карту(MapViewOfFile) и писать в файл?
                  Цитата Sherman @
                  OVERLAPPED это то что мне нужно?

                  Нет. Сначала тебе нужно сделать то что я тебе рекомендовал, это самое простое, с чего надо начинать. Проецирование и т.п. - это следующий шаг, не стоит перескакивать.
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:
                  Страницы: (3) 1 2 [3]  все


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0350 ]   [ 17 queries used ]   [ Generated: 29.03.24, 11:21 GMT ]