Witam, jako element pracy magisterskiej pisze program do analizy sekwencji nukleotydowych genów, pobranych z bazy danych za pomocą idHTTP.
program działa mniej więcej tak:
- odczytuje listę genów które maja być przeanalizowane
- sprawdza czy informacje o genie xxx zostały juz w przeszłości pobrane jeśli tak to przechodzi do pkt4
- wywołuje funkcje ktora pobiera dane:
procedure TForm1.SciagnijDane(NazwaGenu: String);
var
HTML, Plik : String;
GenDane: TextFile;
begin
Plik := 'genes\'+NazwaGenu+'.gene';
if not FileExists(Plik) then
begin
AssignFile(GenDane, Plik);
HTTP.Connect;
try
try
HTML := HTTP.Get('http://srs.ebi.ac.uk/cgi-bin/wgetz?-noSession+-e+[refseq-id:'+NazwaGenu+']+-ascii');
Rewrite(GenDane);
Write(GenDane,HTML);
CloseFile(GenDane);
except
raise Exception.Create('Nie można połączyć się z serwerem! Sprawdz polaczenie internetowe.');
end;
finally
HTTP.Disconnect;
end;
end
end;
- dokonuje analizy statystycznej danych nt genu wydobytych z pliku xxx.gene
- wynik analizy zapisuje do TStringGrid
- wraca do pkt 2
w trakcie analizy wyświetlane sa informacje o jej stanie: log w TMemo + ProgressBar, poza tym po każdej analizie aktualizowane sa wykresy w TChartFX . Wszystko poza ProgressBarem położone jest na TabbedNotebook.
Program działa poprawnie jednak po kilku iteracjach interfejs przestaje odpowiadać, program działa dalej jednak niemożliwy jest podgląd informacji o analizie do czasu jej zakończenia. O korzystaniu z TabbedNotebook mogę zapomnieć z chwila uruchomienia skryptu jednak z czasem nawet ProgressBar przestaje być aktualizowany.
Program działa wolno ze względu na duża ilość informacji jaka trzeba pobrać przez http, sama analiza nie obciąża praktycznie wcale procesora i działa natychmiastowo. Użycie procesora to max 2%, pamięci ok 23MB. Przypuszczam ze źródłem problemu moze byc właśnie funkcja pobierająca dane z serwera.
Nie potrafie rozwiazac tego problemu za pomoca googla :P
Proszę o pomoc.