Ga naar inhoud

[Delphi] Bestand Schrijven in timer


Aanbevolen berichten

Wat noem je 'erg' ? Volgens mij gaat het je wel flink wat wachttijd kosten zodat je het niet of nauwelijks 10 keer per seconde dat bestand geopend en gesloten krijgt (openen & sluiten kost tijd, je bent erg afhankelijk van de pc in kwestie of het lukt). Is er een reden waarom je het op die manier wilt doen ? ie : is er een ander programma dat die ini-file 10x per seconde gaat wijzigen ? Is het daardoor wel zinvol om 10x per seconde datzelfde bestand te openen ? Wat mij verstandiger lijkt is om het bestand pas (weer) te openen als je zeker weet dat er iets gewijzigd is. Je vraagt dan (zodra je het bestand voor jezelf kunt openen) eerst de file-info op en haalt daar het tijdstip uit waarop het gewijzigd is. Als dat verschilt van je laatste poging dan heeft het zin om het weer opnieuw in te lezen ...
Link naar reactie
Ik ben zoals altijd weer eens lui. Ik ga een draadloze afstandbediening maken, deze kijkt elke 100 ms ofn er op een knop is gedrukt en wijzigt aan de hand daarvan een grafisch display. In diezelfde timer wordt een ini-bestandje geopent, ook al weet ik dat er eigenlijk nooit iets veranderd. De gedachte was juist, als het ergens in een buffer wordt opgeslagen hoef ik het zelf niet te bufferen. M'n pc heeft het er ook niet moeilijk mee. Toch maar veranderen?
Link naar reactie
Het bestand dat je in een object van TInifile-klasse zet wordt al vanzelf gewijzigd. Je hebt (behalve bij Win9x) geen extra aanroep nodig. Pas als je andere programma's hebt die hetzelfde ini-bestand willen lezen/wijzigen hoef je het bestand opnieuw in te lezen. Dus dat kan makkelijk buiten die lus om. Btw : ik neem aan dat je dus niet gewoon met events kunt werken bij je toetsen ? Want een leesprocedure die iedere 100ms gedaan moet worden klinkt als veel werk voor iets dat mogelijk al vanzelf kan ...
Link naar reactie
[quote:e63c6c96e7="MichielPH"]Ik ben zoals altijd weer eens lui. Ik ga een draadloze afstandbediening maken, deze kijkt elke 100 ms ofn er op een knop is gedrukt en wijzigt aan de hand daarvan een grafisch display. In diezelfde timer wordt een ini-bestandje geopent, ook al weet ik dat er eigenlijk nooit iets veranderd. De gedachte was juist, als het ergens in een buffer wordt opgeslagen hoef ik het zelf niet te bufferen. M'n pc heeft het er ook niet moeilijk mee. Toch maar veranderen?[/quote:e63c6c96e7] Hoewel de interne Windows cache hier gaat ingrijpen, zou ik dit toch maar even veranderen. Het heeft een nadelig effect op de performance als je dit niet aangepast. Ook al zat dit misschien niet direct merkbaar zijn. Je moet gewoon eenmalig bij het opstarten van je programma ofzo de instellingen laden en bij het sluiten van je applicatie en/of wijzigen van de instellingen de instellingen opslaan.
Link naar reactie
@JaFO: Een INI-bestand openen, lezen en sluiten gaat zat in 100ms. Ik neem hierbij aan dat je INI-file geen vele megabytes groot is. TS zegt dat het bestand niet veranderd, dus hoef je het ook niet steeds te openen en te lezen. Wanneer je ReadString() van TIniFile aanroept, wordt er uit het bestand gelezen. Dit moet je voorkomen omdat het zinloos is. Gebruik daarom TMemIniFile, deze leest eerst alles in, en als je ReadString aanroept leest hij dit uit het geheugen. Maak eens een stress-test en zie de verschillen. Succes.
Link naar reactie
Ik zeg ook niet dat het niet binnen die tijd kan, maar dat je wel te (erg) afhankelijk bent van het systeem, de locatie en het bestand in kwestie. Die TMemoryInifile is inderdaad de betere keuze als je iets meer snelheid wilt. Ik was dat type ff vergeten, maar ik gebruik het zelf ook in m'n progsels :)
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...