| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > тактика работы с файлами |
| Автор: Kvazilol 20.4.2007, 01:25 |
| есть диски, хочу читать с дисков кое какие файлы. есть папка на какомто диске, хочу эти файлы туда сохранить. главное что хочу делать эти действия одновременно чтобы не ждать пока там ВСЕ файлы найдутся... какой самый быстрый алгоритм этой программы? вот как сделал я - 1 этап) получить список всех файлов (загрузка проца на 100% на секунд 40) 2 этап) для каждого ДИСКА создается и запускается поток в котором нужные файлы этого диска сохраняются в мою ОчередьФайловНаЗапись ОчередьФайловНаЗапись это у меня такой объект (1 объект на всю программу, виден везде), снаружи туда можно только добавлять файлы. как только файл добавлен, он записывается, как только он записался, записывается слудующий файл из очереди этого объекта. таким образом пока в очереди есть файлы, он записываются, как только в очереди нет файлов, ничо не просходит пока в очереди не появится файл. Фишка в том что Сохранение файла происходит в потоке с очень низким приоритетом, таким образом пока файл пишется, в очередь, вероятно, добавятся еще файлы. (одновременно будут чтение с дисков и запись на один из дисков!!! думаю что это выйгрыш производительности) как бы стратегия такая - для каждого диска выполняется поток чтения файлов с диска и занесение их в очередь + отдельный поток записи файлов (а очередь нужна чтобы одновременно и на один диск не записывись более 1 файла!!! ведь иначе скорость записи ооочень сильно уменьшается ) критикуйте, советуйте, что не так и как должно быть если чо, кину код, но помоему можно и так все объяснить и понять тестировать разные варианты очень лень.. хотя было бы полезно |
| Автор: Hurricane 20.4.2007, 03:24 |
| Возможно я полон излишнего пессимизма, но думаю, что особого выиграша там получить нельзя, при любой стратегии. Работа с диском настолько медленнее всяких вычислений, что это даже не смешно. Единственное, на чем (в теории, как это получить на практике - без понятия) можно было бы выиграть - не делать лишних позиционирований. Но никто не знает, как раскиданы файлы по диску, так что это остается только теорией. Ну и разные физические диски можно обрабатывать параллельно. С логическими дисками - это по барабану. |