Witam.
Mam problem z działaniem Tfilestream, w zasadzie z jego małym potomkiem co tu raczej nie ma znaczenia. Problem polega na dziwnym działaniu metody write (która nie została przeze mnie przeciążona więc jest to metoda write klasy Tfilestream) w tylko jednym miejscu mojego kodu. Mianowicie zdarza się, że kod:
var st:string;
begin
// operacje na st oraz f, który jest obiektem klasy potomnej Tfilestream
//wraz z przydzieleniem 60 bajtów pamięci na st
f.position:=70;
f.Write(st[1],60)// tu się "blokuje"
// inne operacje na f oraz st
end;
jest wykonywany przez kilka a nawet dwadzieścia kilka sekund. W tym czasie na maxa świeci się dioda dysków na obudowie kompa jakby były wykonywane nie wiadomo jakie operacje na dysku a to przecież tylko zapis 60-ciu bajtów. Przeglądałem ten kod pod debugerem w środowisku delphi i nie mam co do tego wątpliwości, że właśnie w oznaczonym miejscu
f.Write(st[1],60)
program staje na te kilka albo więcej sekund. Problem ten występuje nie zawsze, czasem zapis trwa ułamek sekundy tak jak należałoby się tego spodziewać jednak jeśli jest problem to tylko w tym jednym miejscu kodu. Testowałem to na różnych plikach testowych o rozmiarach od kilku do kilkuset megabyteów i w każdym z nich pojawia się od czasu do czasu ten efekt długotrwałego zapisu owych 60-ciu byteów w tym jednym miejscu mojego kodu.
Co może być tego przyczyną? Jak ten problem usunąć? To dość kłopotliwe jesli program miałby zatrzymywać się na tak długi czas z powodu jednego małego zapisu na dysk.
P.S Nie wiem czy to ma znaczenie ale ten kod powodujący długotrwały zapis wykonywany jest w destruktorze. Strumień f jest otwarty do odczytu i zapisu.
Z góry dziękuję za wszelkie konstruktywne posty i próby pomocy:-)