|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.11.2009, 23:04 | #1 | |
Форумчанин
Регистрация: 08.05.2009
Сообщений: 247
|
Доброе время суток!!!
Нужно большие типизированые файлы обрабатывать в нескольких потоках для ускорения поиска. Решения нужно зделать на WinApi... Пробывал ReadFile пороспихивать в потоки, получилось очень нехарашо насколько я понял если файл будет открыт один раз и его дескриптор передан во все потоки то харошего ничего не получится так как функция ReadFile смещает курсор на количество считаных байт. Из этого возник вопрос, можна ли както сдублировать хендлы файла и передать в потоки? может есть какие-то иные решения? Может открывать файл в каждом потоке отдельно? =================================== ===== Пробывал использовать CreateFile с разными наборами флагов, но чтобы главному потоку дать право чтения+записи а дополнительным только чтения у меня не удалось, получается либо всем чтения либо запись... Есть хоть какие-то предложения?
Мой сайт
Цитата:
Последний раз редактировалось Stilet; 30.11.2009 в 10:48. |
|
30.11.2009, 08:29 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
а Вы уверены, что овчинка стоит выделки?!
Попробуйте банальнейше скопировать файл (только обязательно обеспечьте, чтобы файл был не в кэше!!! например, перезагрузите компьютер и сразу попробуйте. первый раз он будет не в кэше...) Засеките время копирования. Вот это то время, которое (теоретически) Вы можете получить в своей программе. ИМХО, дело в том, что читая файл в разных потоках, прироста скорости Вы не добьётесь!! (если только основное время работы не тратится на обработку считанных данных... тогда да, распараллелить обработку может дать выигрыш в скорости работы программы. Но увеличиться скорость работы программы, а не скорость чтения файла!!! p.s. всё вышесказанное прошу рассматривать как моё личное непроверенное (и, возможно, ошибочное) мнение... |
30.11.2009, 10:38 | #3 | |
Форумчанин
Регистрация: 08.05.2009
Сообщений: 247
|
Собственно, о том что чтения файла в потоках не даст особого выграша в скорости я с Вами согласен, но сам обработка... вот в сам обработчик нам и нужно считать(передать указатель) блок даных, была идея отобразить кусок файла в память, но я ее забраковал...
хоть нынче памят и дешовая но если туда запхайть файлик у 100 мб. ...некрасиво получится =================================== ======================= Что бы было понятней что я хочу покажу пример: дупустим мы имеем файл 30 000 записями поиск обычно работает в цикле от первой до последней записи... я же хочу розделить эти циклы на несколько частей, пусть каждый обрабатывает по 10 000 записей и запустить их в дополнительных потоках, вот-это думаю даст значительный прирост в скоросте...
Мой сайт
Цитата:
Последний раз редактировалось DarkEvil; 30.11.2009 в 10:50. |
|
30.11.2009, 10:51 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Если уж невтерпеж читать через потоки, то перед очередным чтением
приостанавливай другие потоки, читающие файлы.
I'm learning to live...
|
30.11.2009, 11:07 | #5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
а может лишь один поток читать будет? а другим передавать данные на обработку?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
30.11.2009, 11:12 | #6 | |||
Форумчанин
Регистрация: 08.05.2009
Сообщений: 247
|
Цитата:
11:14 Цитата:
Торможение заметно... Что, опять кнопка "Правка" не видна? Или правила не для вас писаны?
Мой сайт
Цитата:
Последний раз редактировалось mihali4; 30.11.2009 в 11:36. |
|||
30.11.2009, 11:31 | #7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
пусть читает ТОЛЬКО главный поток. а остальным передавайте данные через указатели.и не забывайте указатель после обработки nil'ить(это к вопросу синхронизации)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
30.11.2009, 12:06 | #8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Чтение нескольких записей в TList ? | spamer | Общие вопросы Delphi | 10 | 30.10.2009 17:07 |
Чтение из файла. Си. | MAKEDON | Помощь студентам | 1 | 17.08.2009 16:42 |
Чтение из файла | Amen | БД в Delphi | 2 | 09.12.2008 10:40 |
Чтение файла | Stanislav | Общие вопросы Delphi | 18 | 24.11.2007 20:45 |
Чтение из файла | Need_Help | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 19.05.2007 05:37 |