NLDelphi logo

Apada
Start Forum Nieuws Artikelen Links E mail Statistieken
NLDelphi

Ga Terug   NLDelphi > Vraagbaak > Algemeen

Antwoord
 
Onderwerpopties Zoek in onderwerp Stem op Onderwerp Weergavemodus
Oud 27-Jan-05, 09:42   #1
Adnan
Senior Member
 
Adnan's Avatar
 
Geregistreerd op: Sep 2002
Locatie: Den Bosch
Berichten: 538
Question Conversie Delphi 7 -> Delphi 2005

Wij hebben sinds kort Delphi 2005 aangeschaft. Ons oude Delphi 7 project komt (na erg lang pielen) door de compiler heen... maar het programma werkt niet meer als voorheen! Er lopen een aantal dingen anders, en we hebben geen idee wat er nu precies mis gaat! Het is als volgt:

Een record:

Code:
Type string30 = string[30];
     string45 = string[45];
     string15 = string[15];
     string27 = string[27];
     UserInfo = Record
           UserID   : String15;
           UPassword: String15;
           UFullName: String30;
           UEmail   : String45;
           UMaster  : Boolean;
           UEnabled : Boolean;
           DataDir  : string27;
           Reserved : integer;
     End;

Een variabele:

Var F : File Of UserInfo;

Wat code:

Code:
      AssignFile(F,SimplexPasswordFile);
      Reset(F);
      Fsize := FileSize(F);
      result := 0;
      try
        while result < Fsize do
        begin
          Seek(F,result);
          BlockRead(F,UserRec,1);
          if R(result, UserRec, X) then
            break
          else
            inc(result);
        end;
      finally
        CloseFile(F);
        if result >= Fsize then result := -1;
      end;
Het probleem:

In Delphi 7 werkt het uitlezen van dit bestand dus GOED! Altijd gedaan... maar nu, in Delphi 2005, wordt alleen het EERSTE item goed uitgelezen, en alle VOLGENDE items niet meer!

Iemand ideeen??
Adnan is offline   Met citaat antwoorden
Oud 27-Jan-05, 09:52   #2
marcov
mov eax,marcov; push eax
 
marcov's Avatar
 
Geregistreerd op: Apr 2004
Locatie: Ehv, Nl
Berichten: 6.311
Klinkt als alignment probleem. Maak het record eens "packed"

type x= packed record
marcov is nu online   Met citaat antwoorden
Oud 27-Jan-05, 10:07   #3
Adnan
Senior Member
 
Adnan's Avatar
 
Geregistreerd op: Sep 2002
Locatie: Den Bosch
Berichten: 538
Geniaal!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!

Bedankt, het werkt nu wel!
Adnan is offline   Met citaat antwoorden
Oud 27-Jan-05, 10:15   #4
Adnan
Senior Member
 
Adnan's Avatar
 
Geregistreerd op: Sep 2002
Locatie: Den Bosch
Berichten: 538
Nog even een vraagje:

Heeft dit "packed" alleen te maken met bestanden, of heeft het ook effect op records in het geheugen?

Laatst aangepast door Adnan : 27-Jan-05 om 10:24
Adnan is offline   Met citaat antwoorden
Oud 27-Jan-05, 10:19   #5
Dirk Andries
SillyMember
 
Dirk Andries's Avatar
 
Geregistreerd op: May 2003
Locatie: Gent
Berichten: 7.315
Beiden.
Noteer dat gebruik van packed voor structured types een negatieve invloed heeft op performance.
__________________
"All methodologies are based on fear" -- Kent Beck
Dirk Andries is offline   Met citaat antwoorden
Oud 27-Jan-05, 10:22   #6
Adnan
Senior Member
 
Adnan's Avatar
 
Geregistreerd op: Sep 2002
Locatie: Den Bosch
Berichten: 538
Ja, dat had ik gelezen!? Is daar niets aan te doen... is dit de enige manier om bestanden weg te schrijven dan? Want dat zou betekenen dat Delphi 2005 altijd dus een degradatie is, qua bestandsverwerkingen?!

En, als ik van ALLE records een 'packed' record maak, is dat dan ALTIJD goed, of werkt dat is sommige gevallen dat weer niet ofzo?
Adnan is offline   Met citaat antwoorden
Oud 27-Jan-05, 10:27   #7
Dirk Andries
SillyMember
 
Dirk Andries's Avatar
 
Geregistreerd op: May 2003
Locatie: Gent
Berichten: 7.315
Als ik je record definieer in D7 en de size opvraag is dat 144 bytes, in D2005 is dat hetzelfde. Packed geven beiden 143 bytes. Het probleem is dus blijkbaar niet D7 versus D2005.
Ook: waarom gebruik je BlockRead (untyped files) i.p.v. Read?
__________________
"All methodologies are based on fear" -- Kent Beck
Dirk Andries is offline   Met citaat antwoorden
Oud 27-Jan-05, 10:36   #8
Adnan
Senior Member
 
Adnan's Avatar
 
Geregistreerd op: Sep 2002
Locatie: Den Bosch
Berichten: 538
Dat is wel heel vreemd dan inderdaad! Want deze ENE wijziging zorgt er wel voor dat het programma nu doorloopt in 2005!?

En we kunnen inderdaad net zo goed Read gebruiken, maar dit is ooit gewoon zo geprogrammeerd (enkele jaren geleden) en nooit meer aangepast! Zit daar ook een verschil tussen (Read en BlockRead) dan??
Adnan is offline   Met citaat antwoorden
Oud 27-Jan-05, 10:47   #9
marcov
mov eax,marcov; push eax
 
marcov's Avatar
 
Geregistreerd op: Apr 2004
Locatie: Ehv, Nl
Berichten: 6.311
Dirk: de performance penalty is zeer CPU afhankelijk.

Soms is b.v. "packed" sneller, bij voorbeeld omdat een datastructuur plotseling wel in
de cache past.

Adnan: Record alignment is het toevoegen van dummy bytes zodat velden op een veelvoud van een aantal bytes (2,4,8,16,32) beginnen. Sommige processoren kunnen velden die op deze manier gepositioneerd zijn dan wat sneller vinden. "packed" voorkomt dit, en ragt alle velden achter elkaar. Blockwrite kopieer letterlijk x bytes van geheugen naar file. De file is dus een afspiegeling van het geheugen.

Dit soort versnellingen zijn sinds caches echter wat achterhaald. Een cache miss is nl vele malen duurder, en die komen in de meeste realworld apps veel vaker voor.

Allleen zeer CPU intensieve code die zeer intensief met grote statische arrays werken (compressie, grafische programma's soms) hebben hier baat bij.
marcov is nu online   Met citaat antwoorden
Oud 27-Jan-05, 10:48   #10
Dirk Andries
SillyMember
 
Dirk Andries's Avatar
 
Geregistreerd op: May 2003
Locatie: Gent
Berichten: 7.315
Heb je misschien de project options gewijzigd?
Zie {$A}
__________________
"All methodologies are based on fear" -- Kent Beck
Dirk Andries is offline   Met citaat antwoorden
Oud 27-Jan-05, 10:52   #11
marcov
mov eax,marcov; push eax
 
marcov's Avatar
 
Geregistreerd op: Apr 2004
Locatie: Ehv, Nl
Berichten: 6.311
Dirk: blockread is veel sneller, en kan meerdere soorten objecten door elkaar aan.
marcov is nu online   Met citaat antwoorden
Oud 27-Jan-05, 10:59   #12
Adnan
Senior Member
 
Adnan's Avatar
 
Geregistreerd op: Sep 2002
Locatie: Den Bosch
Berichten: 538
Jongens... jullie zijn geweldig! We hebben enkele opties aan- en uitgeschakeld... die verschillen tussen de projecten in D7 en D8 -- en voila, alles werkt perfect, zelfs het packed record zijn niet nodig!!!!!

(Niet zo slim van ons om die instellingen niet te controleren)

Bedankt... en sorry voor het verdoen van jullie kostbare tijd!
Adnan is offline   Met citaat antwoorden
Oud 27-Jan-05, 12:07   #13
Dirk Andries
SillyMember
 
Dirk Andries's Avatar
 
Geregistreerd op: May 2003
Locatie: Gent
Berichten: 7.315
D8?
Ik dacht dat D2005 betrof?
__________________
"All methodologies are based on fear" -- Kent Beck
Dirk Andries is offline   Met citaat antwoorden
Oud 27-Jan-05, 12:09   #14
Dirk Andries
SillyMember
 
Dirk Andries's Avatar
 
Geregistreerd op: May 2003
Locatie: Gent
Berichten: 7.315
Citaat:
Origineel gepost door marcov
Dirk: blockread is veel sneller...
Hij leest 1 (één) record in een typed file. Even getest in D7 en D2005 met 100 tot 1 000 000 records: geen merkbaar verschil qua snelheid.
__________________
"All methodologies are based on fear" -- Kent Beck
Dirk Andries is offline   Met citaat antwoorden
Oud 27-Jan-05, 12:29   #15
Adnan
Senior Member
 
Adnan's Avatar
 
Geregistreerd op: Sep 2002
Locatie: Den Bosch
Berichten: 538
Sorry, ik bedoelde inderdaad D2005!!
Adnan is offline   Met citaat antwoorden
Antwoord

Bookmarks


Momenteel bekijken: 1 (0 leden en 1 gasten en/of zoekmachine bots) actieve gebruikers dit onderwerp
 
Onderwerpopties Zoek in onderwerp
Zoek in onderwerp:

Geavanceerd zoeken
Weergavemodus Stem op dit onderwerp:
Stem op dit onderwerp::

Berichting Regels
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Aan
Smilies zijn Aan
[IMG] code is Aan
HTML code is Uit

Forumnavigatie

Soortgelijke onderwerpen
Onderwerp Auteur Forum Reacties Laatste Bericht
Quickreport weg uit delphi 2005? Wat dan gebruiken? r.nijenhuis Algemeen 16 07-Mar-05 15:15
VCL Crystal Reports 10 voor Delphi 2005 Eric vd Heuvel Algemeen 2 27-Dec-04 12:41
Delphi for the .Net framework of Delphi 2005 Alias1524 Koffiehoek 13 25-Nov-04 21:45
Mijn gedachte: "Borland een tegenstrijdig bedrijf" verhelpen Cornelis Koffiehoek 67 15-Jun-04 10:32
Delphi --> COM --> VB problemen sdk Algemeen 1 29-Jan-03 16:39


Alle tijden zijn GMT +1. De tijd is nu 07:43.


Forum software: vBulletin, versie 3.8.4
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Copyright ©2008, NLDelphi.com (Dutch Delphi programming)