Een tip: als er performance in het geding is gebruik dan nooit in een locale routine TFormatSettings.Create().
Een tip: als er performance in het geding is gebruik dan nooit in een locale routine TFormatSettings.Create().
Die laad waarschijnlijk defaults via OS locale routines ?
Ik denk het inderdaad. Performance van een inleesroutine van 4 seconden naar 0.2 na aanpassing.
Wat is de aanpassing dan? Ik vind 4 seconden heeeeel veeeel.
Delphi is great. Lazarus is more powerfull
De oplossing is dat ik in mijn lokale TryFloat() routine niet een TFormatSettings.Create aanroep + aanpas, maar deze 1x aanmaak in den beginne en per TryFloat() call alleen even de decimalseparator aanpas
De constructor roept een overload aan die op basis van een locale een hoop instellingen gaat ophalen. Dat is inderdaad een hele lijst API calls omdat waarde voor waarde op te halen.
Als je toch zelf de specifieke decimal separator in wilt stellen en de rest niet nodig hebt, dan kan je ook TFormatSettings.Invariant gebruiken. Die geeft een record dat is geinitialiseerd met een (kleiner) aantal vaste waarden. Overigens kan het dan nog steeds iets efficienter zijn om 'm te cachen, want je krijgt tenslotte nog steeds elke keer een nieuw, geinitialiseerd record terug, al zal de overhead minimaal zijn, en praktisch verwaarloosbaar vergeleken met de API-versie.
En je kan natuurlijk ook een ongeinitialiseerd record gebruiken. De constructors zijn er vooral om een TFormatSettings te initialiseren met default waarden op basis van vaste constanten, je huidige omgeving, of een specifieke locale.
1+1=b
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks