Форум: "Начинающим";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];
Внизмногопоточный доступ к файлу Найти похожие ветки
← →
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 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c