Citaat:
M@rco schreef op 16-01-2007 @ 15:17 :
Waarom zou het register worden doorzocht? Dan zou je gelijk hebben ja, maar een programma dat het register raadpleegt weet precies wat 'ie moet hebben en waar dat staat. Die paar ongebruikte sleutels nemen hoogstens een paar extra bytes in op je harde schijf. Maar jij weet toch ook wel dat als je iets uit een database haalt, het niet uitmaakt of die database nou 2 kB is of 100 MB. Tenzij je de database eerst doorzoekt, maar dat gebeurt dus niet.
Ik geloof dat er in de c't een keer een artikel stond waarin ze het register opgeblazen hadden tot paar honderd MB, en er was geen merkbare invloed op de prestaties. :p
|
Het register is een soort database, daar volg je in, hoop ik. Nu, in een database staan normaal indextabellen, die voor elke key aangeven waar ze staan (hoe dat in het register precies in zijn werk gaat, zou ik niet weten, maar in ieder geval analoog). Zo'n indextabel kan je vergelijken met een trefwoordenregister in een encyclopedie of desnoods vergelijken met een telefoonboek.
Nu, wat gebeurt er als je iets moet opzoeken in een telefoonboek of in een index: juist ja, je doorbladert het tot je vindt wat je zoekt, hoe groter die index, hoe langer dat duurt (een telefoonboek van 2 bladzijden heb je sneller doorzocht dan eentje van 2000 bladzijden), net zozeer gaat dit op voor computers. Nu weet ik niet of het Windows register wel indextabellen gebruikt of dat het een soort full-text search (alsof je in plaats van in het trefwoordenregister op zoek zou gaan in de volledige brontekst, een telefoonboek is per definitie een index per gemeente per naam, maar stel dat je bijvoorbeeld een bepaald nummer zou willen linken aan een naam, moet je ook alles doorlopen). Volgens mij zal het wel indextabellen gebruiken, anders zou je een gigantische versnelling krijgen bij het opschonen. In feite komen indextabellen neer op een secundaire database die enkel een record uit de echte database koppelt met een bepaalde waarde waarop gesorteerd kan worden. Elk van beide systemen heeft bepaalde voor- en nadelen; maar allebbei worden ze trager naarmate de database groter wordt (bij fulltext is dat effect duidelijker te merken), bij indexzoeken is het effect vrij miniem (zoals ik hier al 3 posts duidelijk probeer te maken: het effect is niet groot, maar is er wel). En die secundaire database moet in ieder geval doorzocht worden, want zonder doorzoeken van een of andere database kun je nooit weten waar een bepaald record staat en het zoeken wordt gewoon trager naarmate er meer items zijn waarin je moet zoeken, het maakt enkel uit ofdat je die items gans moet doorbladeren (full text search) of bijvoorbeeld enkel een kleine verwijzing ernaar (indexed searching).
En als je nog steeds niet gelooft dat een grote database trager is dan een kleine: een database is op zich niet meer dan een bestand of een verzameling bestanden. Een database van 2 kB kan op heel korte tijd ingelezen worden vanop de harde schijf naar het werkgeheugen; bij een van 200 megabyte duurt dat langer (net zoals het langer duurt om een bestand van 200 megabyte te kopiëren naar cd/netwerkshare/... dan eentje van 2 kb). Het verschil wordt steeds kleiner, maar het fenomeen blijft nog steeds geldig.
Zou je eventueel eens kunnen denken welke jaargang die CīT (Nederlandse toch, want de Duitse heb ik in geen geval) was? Misschien heb ik hem hier liggen (kans is klein)?
En die onnodige keys zullen wel iets meer dan enkele bytes innemen; als je al moet tellen voor 1 (Win 9x, NT4) 2 (2000, XP en hoger) bytes per character, als we uitgaan van strings, voor getalwaarden in het register is er inderdaad niet veel ruimte nodig. Ik denk eerder aan enkele kB. Ik heb hier eventjes mijn Windows-register nagekeken, met het user-specifiek gedeelte (voor mijn hoofdgebruiker, vermits er maar 1 user-specifiek gedeelte per keer geladen wordt, tenzij je met meerdere personen tegelijk ingelogd bent) erbij zit ik op ongeveer 60 megabyte, meestal let ik vrij goed op wat ik installeer; dus in vreselijke gevallen lijkt 100 megabyte nog niet overdreven. Maar het opschonen heeft inderdaad, ook al 4e of 5e keer dat ik het zeg, heel weinig effect; als je computer geregeld vastloopt en je register is bijvoorbeeld 500 megabyte (door veel spyware, installeren, verwijderen, ...) , dan zal je waarschijnlijk wel heel wat voordeel halen.