Integer Napisano Marzec 30, 2009 Zgłoś Share Napisano Marzec 30, 2009 Kod właściwy w odpowiedzi nr1. Cześć. Mam tu kilka linijek kodu i zastanawiam się jak go zoptymalizować (choćby pod względem szybkości działania i niepotrzebnego kodu ). Moduł jak na razie przy tworzeniu się formy : - sprawdza obecność dwóch plików: FFileName_ParProp I FFileName_ParList - jeśli są to wczytuje ich zawartość przez TStringList a potem do tabeli: TRecTabZycPrmOne. Record Tab : TTabZycPrmOne - jeśli nie ma to takowa jest tworzona wraz z plikami Po wywołaniu z innej formy: unit Komputer; interface Uses ParametryU, SysUtils, Classes; var vOsobaKomputer: TZycPrm; procedure OsobaKomputer_Start; implementation procedure OsobaKomputer_Start; begin // vOsobaKomputer:= TZycPrm.Create('Komputer'); //vOsobaKomputer. end; end. Mamy wynik działania: ..\Program\Parametry\ ParList.txt Zdrowie Emocje Socjologia Estetyka Kultura Bezpieczenstwo Tworczosc Pracowitosc Rozrywka ..\Program\Parametry\Komputer\Komputer_Zyciowe.txt {Naz|Zal|Mn|Mx|K|dK|L|dL|Opt|Ter|ArMn|ArMx|} [Zdrowie|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|50|1|0,3|0|0,9|0|] [Emocje|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|51|1|0,3|0|0,9|0|] [socjologia|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|84|1|0,3|0|0,9|0|] [Estetyka|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|58|1|0,3|0|0,9|0|] [Kultura|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|60|1|0,3|0|0,9|0|] [bezpieczenstwo|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|76|1|0,3|0|0,9|0|] [Tworczosc|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|62|1|0,3|0|0,9|0|] [Pracowitosc|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|56|1|0,3|0|0,9|0|] [Rozrywka|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|64|1|0,3|0|0,9|0|] Link do komentarza Udostępnij na innych stronach More sharing options...
Integer Napisano Marzec 30, 2009 Autor Zgłoś Share Napisano Marzec 30, 2009 Oto kod: Link do komentarza Udostępnij na innych stronach More sharing options...
Integer Napisano Marzec 30, 2009 Autor Zgłoś Share Napisano Marzec 30, 2009 Jeśli chodzi o funkcje Bool to zrobiłem podmiankę w standardzie False := -1; True := 0; natomiast żeby zaoszczędzić na bajcie zapisanym do pliku zrobiłem tak False := 0; True := 1; Natomiast jeśli chodzi o Goto to okazuje się że jest szybsza i zajmuje mniej miejsca niż Exit; Chyba, że źle doczytałem to sorry... Dlatego chodzi mi o jakąś bardziej zawansowaną optymalizację popartą przykładami, może ktoś ma uwagi merytoryczne też chętnie poczytam. Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Marzec 30, 2009 Zgłoś Share Napisano Marzec 30, 2009 1. Uwaga merytoryczna: o co chodzi ? 2. Wrzuciles kod niczym wyciagniety nie powiem z czego, taki stary dziad jak ja po prostu to przewinal nawet nie zerknalem na to, bo indentacja jak w powrocie zywych trupow 3. Jesli optymalizujesz kod uzywajac goto zamiast exit, to bez obrazy ale przyjdz za 2-3 lata jak napiszesz te 200-300k lini kodu i zaczniesz myslec powazanie o optymalizacji. 4. Napierw zastanow sie co chcesz osiagnac, pozniej: po co chcesz to osiagnac, a pozniej pytaj sie jak to osiagnac... Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Integer Napisano Marzec 30, 2009 Autor Zgłoś Share Napisano Marzec 30, 2009 Add 1. Każda uwaga się liczy. 2. Sorki niedopatrzenie - poprawiłem. 3. Zrobiłem tak bo dodanie Exit bardziej powiększa exe-ka niż Goto, 4. a mi zależy na optymalizacji, szybkości programu przynajmniej w tym wypadku Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Marzec 30, 2009 Zgłoś Share Napisano Marzec 30, 2009 szybkosc maly exe www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Marzec 30, 2009 Zgłoś Share Napisano Marzec 30, 2009 troche ironii: 2 linijki z twojego kodu: StrList.Free; Result:= StrList.Count; kto zgadnie ile bedzie wynosil result ? odnosnie 'optymalizacji' skoro juz tak jedziesz po bandzie ze zamiast exit uzywasz goto (rozumiem ze porownales kod asemblera i wiesz ze goto generuje szybszy kod) to uzasadnij mi uzycie typu string zamiast Pchar, bo chyba nie predkoscia wykonania sie kierowales.... no i jeszcze jedna sprawa. Rozumiem ze procki ktore tutaj przytoczyles sa tzw. bootleneck'iem skoro robisz takie cuda. Zmierzyles moze ile milionow razy ta metoda sie wykonuje i jaki jest zysk predkosci a jaka strata czytelnosci kodu ? Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Marzec 30, 2009 Zgłoś Share Napisano Marzec 30, 2009 2) Zgaduje ze moze byc losowa ze zbioru {AV, random, poprawna wartosc} I obstawiam ze poprawna wartosc ma najwieksze prawdopodobienstwo. Zgadlem? :> www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Marzec 30, 2009 Zgłoś Share Napisano Marzec 30, 2009 ja bym stawial na: av, poprawna wartosc, random. (w takiej kolejnosci, zwlaszcza w TD z bardziej chrupkim mem. mgr'em) Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Integer Napisano Marzec 31, 2009 Autor Zgłoś Share Napisano Marzec 31, 2009 Odp. Toster - no i o to mi chodziło, a co do ironii najciemniej pod latarnią, fakt o PChar nie pomyślałem, ale jak już skończę moduł żeby faktycznie nie zginąć w gąszczu pokuszę się o WinAPI i wtedy pewnie PChar będzie na tapecie. Chyba, że znajdę inny pomysł bo jak na razie TStringList będzie tylko do przechowywania danych na wypadek wyłączenia programu dlatego pod koniec pracy jak juz wszystko będzie w module grało TStringList.Create i ...Free zmienią lokalizację Informacje głównie bedą przechowywane w Tablicy rekordów nad którą też muszę popracować ale tu oprócz typu czysto wskaźnikowego nie mam pomysłu, może jest coś szybszego? Zobacze w WinApi ale to potem - teraz to szkielet. z SySUtils function BoolToStr(B: Boolean; UseBoolStrs: Boolean = False): string; const cSimpleBoolStrs: array [boolean] of String = ('0', '-1'); begin if UseBoolStrs then begin VerifyBoolStrArray; if B then Result := TrueBoolStrs[0] else Result := FalseBoolStrs[0]; end else Result := cSimpleBoolStrs[B]; end; function StrToBool(const S: string): Boolean; begin if not TryStrToBool(S, Result) then ConvertErrorFmt(@SInvalidBoolean, [S]); end; moje procedury w przeciwieństwie do tych z Delphi nie korzystają z innych dodatkowych funkcji (z grubsza), błędu nie sprawdzam bo już na samym początku zakładam że nie ma szans na wpisanie w Boolean czegoś innego nisz True lub False, wydaje mi się to szybsze ale po tym jak wspomniałeś o PChar to i te procedurki w końcu się zmienią. Co do czytelności, hmm..staram się robić opisy i mam nadzieję, że jak dopracuje moduły to nie będę do nich musiał wracać tylko zrobi to za mnie program no i do tego potrzebny mi jest programowo wywoływany kompilator... i innego tematu. Ad. Blind Jeśli chodzi o losowe to tu sobie zostawiłem miejsce na coś na wzór neuronowych gdzie na początku wartości też są losowane a potem program w miarę uczenia się dostraja swoje parametry do wymogów. Wiec to random jest na razie takim wstępem, które potem zastąpi hmm.. muszę odświeżyć sieci i wtedy coś się dopisze. Na razie nie chce stracić głównego wątku Dzięki za podpowiedzi i liczę na następne. Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Marzec 31, 2009 Zgłoś Share Napisano Marzec 31, 2009 Skoro juz bawisz sie w takie absurdy to mozna jeszcze krocej function _StrToBool(const S: string): Boolean; begin Result:= false; if S = '1' then Result:= True end; Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.