Вниз
Скачать: CL | DM;

многопоточный доступ к файлу   Найти похожие ветки 

← →
joo   (2006-08-07 17:19) [0]

Программа использует большой текстовый файл, с примерным содержанием:
param;param;param...
param;param;param...
param;param;param...


Интересует, как лучше и быстрее организовывать доступ к этому файлу, если в программе сразу несколько потоков будет пытаться открыть, прочитать, записать в файл. Я думаю, что надо каким-то образом блокировать файл при доступе из какого-то потока, а по завершении, разблокировать, дабы дать возможность остальным потоком взаимодействовать с файлом.
Возможные варианты взаимодействия -- это: удаление строки, добавление строки, перезапись строки.

Вот и интересует как лучше и быстрее, какие лучше файловые ф-ии использовать из delphi? или сразу на api?


← →
Сергей М. ©   (2006-08-07 17:23) [1]


> или сразу на api?


Это еще зачем ?)


← →
clickmaker ©   (2006-08-07 17:25) [2]

ну апи хоть иногда всего на несколько милисек, но по-любому быстрей.
для разделения доступа лучше TcriticalSection - самый быстрый из всех объектов синхронизации
CS.Enter;
try
 // что-то делаешь с файлом
finally
 CS.Leave;
end;

для ускорения лучше файл открыть один раз и держать открытым (если возможно)


← →
Joe_from_smart   (2006-08-08 01:38) [3]

Добавлю, что блокировать нужно только на время записи, чтение можно оставить в покое :)


← →
Пусик ©   (2006-08-08 10:14) [4]


> Joe_from_smart   (08.08.06 01:38) [3]
> Добавлю, что блокировать нужно только на время записи, чтение
> можно оставить в покое :)


Это вряд ли.


← →
DiamondShark ©   (2006-08-08 11:39) [5]

Написать обёртку


TFileAccessor = class
private
 FHandle: THandle;
 FSynchronizer: TMultiReadExclusiveWriteSynchronizer;
 ...
public
 procedure ReadLine(...);
 procedure WriteLine(...);
end;

...

procedure TFileAccessor.ReadLine;
begin
 FSynchronizer.BeginRead;
 try
   // ...
 finally
   FSynchronizer.EndRead;
 end
end;

procedure TFileAccessor.WriteLine;
begin
 FSynchronizer.BeginWrite;
 try
   // ...
 finally
   FSynchronizer.EndWrite;
 end
end;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
15-1154318044
Ююзер
2006-07-31 07:54
2006.08.27
Почему нет меню в дельфийских программах?


1-1153124134
wezzz
2006-07-17 12:15
2006.08.27
Как в excel записать данные в столбец Х (по порядковому номеру!)


2-1154809655
fog
2006-08-06 00:27
2006.08.27
TScrollBox


4-1146775675
<X>
2006-05-05 00:47
2006.08.27
Работа со шрифтами средствами WinApi


6-1144091609
Velimir
2006-04-03 23:13
2006.08.27
Чат в локальной сети с динамическим IP (tcp)




   Наверх