C# FileStream en schijfgebruik

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • SideShow
  • Registratie: Maart 2004
  • Laatst online: 21-09 15:49

SideShow

Administrator

Topicstarter
Hallo

Ik heb een algoritme die in een file van ongeveer 35KB vele zoekacties en leesacties doet.
Dit gebeurt aan de hand van een FileStream.

Als het process bezig is, kijk in in Task Manager: na ongeveer 5 minuten was de waarde voor I/O bytes read = 542 175 205 048, wat als ik me niet vergis gelijk staat met een 500 gigabyte.

Toch was de schijfactiviteit (geen SSD trouwens) tijdens dat zelfde proces meestal verwaarloosbaar, af en toe 1%.

Kan iemand hier uitleg bij geven? Ik denk aan de cache van het operating system? Dat moet toch ongelofelijk veel overhead veroorzaken want als ik de file zélf eerst in het geheugen laad en er vervolgens het algoritme op los laat (puur op een MemoryStream dus), duurt die zelfde actie geen 5 minuten maar letterlijk enkele seconden.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Waarschijnlijk idd cache van het OS, en ja dat is overhead... Maar het is een algemeen iets niet een specifiek iets wat echt weet dat jij het in memory wilt houden.

In principe moet de OS-cache nog rekening houden met dat een ander proces het bestand kan verwijderen etc, waar jouw in memory lezen geen rekening mee houdt.

Een algemeen iets als OS-cache kent nu eenmaal relatief veel overhead vergeleken met een gespecialiseerd proces als in memory lezen, maar bovenal is het toch wel weer beter dan bruut van schijf aflezen.

En in principe is het normaliter ook niet zo erg als jij het nu maakt, normaliter zijn de bestanden groter en vinden er minder acties op plaats, de meeste overhead zal hem zitten in elke losse actie op zichzelf opstarten

Acties:
  • 0 Henk 'm!

  • AlphaRomeo
  • Registratie: Maart 2007
  • Laatst online: 13:20

AlphaRomeo

FP PowerMod
Het zou ook nog de cache in de hardware (disk) kunnen zijn, dat zou verklaren dat je toch nog 5 minuten bezig bent. Zolang je dezelfde FileStream gebruikt kan het ook caching in .NET zijn, als je de FileStream elke keer disposed en opnieuw aanmaakt zit het in ieder geval in het OS of de hardware.