![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Kvazilol |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 7.12.2006 Репутация: нет Всего: нет |
есть диски, хочу читать с дисков кое какие файлы.
есть папка на какомто диске, хочу эти файлы туда сохранить. главное что хочу делать эти действия одновременно чтобы не ждать пока там ВСЕ файлы найдутся... какой самый быстрый алгоритм этой программы? вот как сделал я - 1 этап) получить список всех файлов (загрузка проца на 100% на секунд 40) 2 этап) для каждого ДИСКА создается и запускается поток в котором нужные файлы этого диска сохраняются в мою ОчередьФайловНаЗапись ОчередьФайловНаЗапись это у меня такой объект (1 объект на всю программу, виден везде), снаружи туда можно только добавлять файлы. как только файл добавлен, он записывается, как только он записался, записывается слудующий файл из очереди этого объекта. таким образом пока в очереди есть файлы, он записываются, как только в очереди нет файлов, ничо не просходит пока в очереди не появится файл. Фишка в том что Сохранение файла происходит в потоке с очень низким приоритетом, таким образом пока файл пишется, в очередь, вероятно, добавятся еще файлы. (одновременно будут чтение с дисков и запись на один из дисков!!! думаю что это выйгрыш производительности) как бы стратегия такая - для каждого диска выполняется поток чтения файлов с диска и занесение их в очередь + отдельный поток записи файлов (а очередь нужна чтобы одновременно и на один диск не записывись более 1 файла!!! ведь иначе скорость записи ооочень сильно уменьшается ) критикуйте, советуйте, что не так и как должно быть если чо, кину код, но помоему можно и так все объяснить и понять тестировать разные варианты очень лень.. хотя было бы полезно Это сообщение отредактировал(а) Kvazilol - 20.4.2007, 01:31 |
|||
|
||||
| Hurricane |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 10.4.2007 Репутация: 3 Всего: 9 |
Возможно я полон излишнего пессимизма, но думаю, что особого выиграша там получить нельзя, при любой стратегии. Работа с диском настолько медленнее всяких вычислений, что это даже не смешно.
Единственное, на чем (в теории, как это получить на практике - без понятия) можно было бы выиграть - не делать лишних позиционирований. Но никто не знает, как раскиданы файлы по диску, так что это остается только теорией. Ну и разные физические диски можно обрабатывать параллельно. С логическими дисками - это по барабану. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |