![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 | |
Форумчанин
Регистрация: 08.05.2009
Сообщений: 247
|
![]()
Доброе время суток!!!
Нужно большие типизированые файлы обрабатывать в нескольких потоках для ускорения поиска. Решения нужно зделать на WinApi... Пробывал ReadFile пороспихивать в потоки, получилось очень нехарашо ![]() Из этого возник вопрос, можна ли както сдублировать хендлы файла и передать в потоки? может есть какие-то иные решения? Может открывать файл в каждом потоке отдельно? =================================== ===== Пробывал использовать CreateFile с разными наборами флагов, но чтобы главному потоку дать право чтения+записи а дополнительным только чтения у меня не удалось, получается либо всем чтения либо запись... Есть хоть какие-то предложения?
Мой сайт
Цитата:
Последний раз редактировалось Stilet; 30.11.2009 в 10:48. |
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
а Вы уверены, что овчинка стоит выделки?!
Попробуйте банальнейше скопировать файл (только обязательно обеспечьте, чтобы файл был не в кэше!!! например, перезагрузите компьютер и сразу попробуйте. первый раз он будет не в кэше...) Засеките время копирования. Вот это то время, которое (теоретически) Вы можете получить в своей программе. ИМХО, дело в том, что читая файл в разных потоках, прироста скорости Вы не добьётесь!! (если только основное время работы не тратится на обработку считанных данных... тогда да, распараллелить обработку может дать выигрыш в скорости работы программы. Но увеличиться скорость работы программы, а не скорость чтения файла!!! p.s. всё вышесказанное прошу рассматривать как моё личное непроверенное (и, возможно, ошибочное) мнение... |
![]() |
![]() |
![]() |
#3 | |
Форумчанин
Регистрация: 08.05.2009
Сообщений: 247
|
![]()
Собственно, о том что чтения файла в потоках не даст особого выграша в скорости я с Вами согласен, но сам обработка... вот в сам обработчик нам и нужно считать(передать указатель) блок даных, была идея отобразить кусок файла в память, но я ее забраковал...
хоть нынче памят и дешовая но если туда запхайть файлик у 100 мб. ...некрасиво получится =================================== ======================= Что бы было понятней что я хочу покажу пример: дупустим мы имеем файл 30 000 записями поиск обычно работает в цикле от первой до последней записи... я же хочу розделить эти циклы на несколько частей, пусть каждый обрабатывает по 10 000 записей и запустить их в дополнительных потоках, вот-это думаю даст значительный прирост в скоросте...
Мой сайт
Цитата:
Последний раз редактировалось DarkEvil; 30.11.2009 в 10:50. |
|
![]() |
![]() |
![]() |
#4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Если уж невтерпеж читать через потоки, то перед очередным чтением
приостанавливай другие потоки, читающие файлы.
I'm learning to live...
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
а может лишь один поток читать будет? а другим передавать данные на обработку?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#6 | |||
Форумчанин
Регистрация: 08.05.2009
Сообщений: 247
|
![]() Цитата:
11:14 Цитата:
Торможение заметно... Что, опять кнопка "Правка" не видна? Или правила не для вас писаны?
Мой сайт
Цитата:
Последний раз редактировалось mihali4; 30.11.2009 в 11:36. |
|||
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
пусть читает ТОЛЬКО главный поток. а остальным передавайте данные через указатели.и не забывайте указатель после обработки nil'ить(это к вопросу синхронизации)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#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 |