Posts

Wat is virtueel geheugen

Alle programma's die worden opgestart, moeten in het geheugen worden geladen. Op de eerste plek probeert het OS het programma te laden in het RAM geheugen. Als er een programma wordt gestart en het RAM geheugen is vol, dan gaat het OS gebruik maken van virtueel geheugen. Dit houdt in dat het OS het RAM geheugen gaat combineren met virtueel geheugen. Het virtuele geheugen wordt opgeslagen op de harde schijf in een pagefile (pagefile.sys). Bij virtueel geheugen verplaatst het OS de data van het RAM geheugen naar het virtuele geheugen. Op deze manier komt er weer geheugen vrij in het RAM. Het lezen en schrijven van en naar het RAM geheugen is aanzienlijk sneller dan lezen en schrijven naar een pagefile (het virtuele geheugen). De grootte van de pagefile wordt automatisch geregeld door Windows. Standaard is dit 1,5 keer zo groot als het aanwezige RAM geheugen. Hoewel deze grootte door Windows is bepaald, kan dit ook handmatig worden ingesteld. bronnen: http://windows.microsoft.co...

De Garbage Collector (GC) in .NET

De Garbage Collector (GC) zorgt voor het toewijzen en vrijgeven van geheugen voor de applicatie. Elke keer als er een object wordt aangemaakt dan wijst de common language runtime (CLR) geheugen van de managed heap toe aan dit object. Een heap is een verzameling van aaneengesloten stukken geheugen. Dit geheugen wordt tijdens het starten van het proces (applicatie) gereserveerd door de runtime en is bij aanvang helemaal leeg. De grootte van de heap is afhanklijk van een aantal factoren: de .NET Framework versie, is het een 32 of 64 bits systeem en in welke mode wordt de GC uitgevoerd, server of werkstation. De managed heap houdt een pointer bij waar het volgende object opgeslagen moet worden. Een heap kan meerdere segments hebben. Als een segement vol is, wordt er binnen dezelfde heap een nieuw segment aangemaakt. Garbage collector roots Een object wordt pas opgeruimd door de GC als deze niet meer direct te benaderen is vanaf de GC root. De GC kent vier verschillende roots: Lokale va...

TDS Tubular Data Stream

Bij het zoeken naar antwoorden van de vorige post , kwam ik de afkorting TDS tegen. Ik was benieuwd wat dit nou was en ben even gaan googlen. Zo kwam ik er achter dat dit een protocol is en staat voor Tabular Data Stream. Dit protocol wordt gebruikt om SQL statements te versturen naar de SQL Server en om de resultaten van de queries terug te sturen. TDS pakketjes worden gebouwd door de Microsoft OLE DB Provider voor SQL Server, de SQL Server ODBC driver of the DB-Library dll. De pakketjes worden dan verstuurd naar de SQL Server client Net-Library, welke de TDS pakketjen verpakt in netwerk protocol pakketten. Op de server worden de netwerkprotocol pakketten ontvangen door de Server Net-Library die de pakketten vervolgens uitpakt naar TDS pakketten en stuurt deze vervolgens naar de relationele database. Als er resultaten zijn voor de client, wordt dit proces herhaald, maar dan voor de client. RPC & Batch Een TDS kent twee om SQL statements uit te voeren: batch en RPC. Een ...

Entity Framework en database calls

Ik wilde wel eens weten wanneer het Entity Framework de database ingaat voor het voeren van requests. Deze vraag had ik al snel beantwoord toen ik op een site van Microsoft terechtkwam. Hier wordt namelijk het volgende gesteld: Het aanroepen van de volgende methodes zorgt ervoor dat er een database verbinding wordt geopend als SaveChanges of Refresh wordt aangeroepen op de ObjectContext als FirstOrDefault of First wordt aangeroepen op de ObjectContext als Load wordt aangeroepen op de EntityCollection als Load wordt aangeroepen op de EntityReference als een LINQ of ObjectQuery method wordt aangeroepen zoals bijv. Where, OrderBy of Select. Dit is terug te lezen op: http://msdn.microsoft.com/en-us/library/bb738582.aspx . Bij het uitvoeren van requests maakt het EF gebruik van 'normale' SQL statements en van de systeem SP ep_executesql. Van de laatstgenoemde maakt EF gebruik indien parameters gemoeid zijn met de query. Als er geen parameters van toepassing zijn wordt een ...

C# delegates Action en MethodInvoker

Beide delegates, Action en MethodInvoker, hebben dezelfde signature: public delegate void MethodInvoker(); public delegate void Action(); Syntactisch zijn ze dus hetzelfde, maar wanneer gebruik je dan welke? Dit antwoord wordt gegeven door de documentatie van Control.Invoke(); De delegate kan een instantie zijn van EventHandler. In dit geval bevat de sender parameter het control en de event parameter bevat EventArgs.Empty. De delegate kan ook instantie zijn van de MethodInvoker, of elke andere delegate die een lege parameter lijst heeft. Een aanroep naar EventHandler of MethodOnvoker delegate is sneller dan een aanroep naar een anderer type delegate Van de dikgedrukte tekst kan geconcludeerd worden dat er binnen de Invoke methode een is/as check plaatsvind en gebruik gemaakt wordt van Invoke, welke aanzienlijk sneller is dan DynamicInvoke.

C# Expression trees

Expression trees worden gebruikt in combinatie met LINQ. Een expression tree is een abstracte representatie van een lambda expressie. Een expression tree kan niet direct worden uitgevoerd. Met de compile() methode wordt in het geheugen de representatie gemaakt in de vorm van een object. Vervolgens kan via code de expressie worden benaderd. Zo gebuikt LINQ2SQL expression trees om de lambda code om te zetten naar een SQL querie. Dit is mogelijk omdat alle onderdelen (de nodes van de tree) van de lambda uitgelezen kunnen worden. Stel je deze lambda voor: x => x.Name == "Martijn" Deze expressie bevat een Body en de body bestaat uit de volgende onderdelen: Left property: Deze bevat de linkerkant van de expressie (x.Name) Right property: Deze bevat de rechterkant van de expressie ("Martijn") NodeType property: bevat de operatie die toegepast is op de twee expressies (==) Normaal gesproken (zeker bij uitgebreide lambda's) worden deze properties achterhaald d...

[Design patterns] Factory vs Builder pattern

Het verschil tussen de factory design pattern en de builder design pattern aan de hand van een voorbeeld. Denk even aan een restaurant. Het maken van de maaltijd van de dag is een factory pattern. Je zegt namelijk tegen de keuken 'geef mij de maaltijd van vandaag' en de keuken/factory bepaalt welk object er gegenereerd moet worden, gebaseerd op de verborgen criteria. De builder pattern komt naar voren bij bijvoorbeeld het bestellen van een pizza. In dit geval verteld de ober de kok 'Ik heb een pizza nodig met kaas, uien en ham'. Dus, de builder stelt de attributen beschikbaar die het gegenereerde object kan hebben maar verbergt hoe ze gezet moeten worden.