I think its pretty safe to say we would all recommend deregistering/unsubscribing events when we are finished with them. I know I was told when learning about events years ago, that if you do not, memory leaks would result. After looking into the GC recently I thought it might be interesting to get some specifics around this.
So, what happens when you don't unsubscribe from events and just pray the GC can figure it out? Unsurprisingly some objects stay alive a lot longer than they should.
The problem can be summarised as follows:
The new Task Parallel Library included in .NET4 is an incredibly easy way to parallelise processing, that would otherwise have to be done with such devices as SpinLock, Semaphores, Monitors and others. Unfortunately those previous devices were crazy easy to get wrong, and remember how they worked after 6 months has elapsed.
One of my favourite sessions at TechEd this year showed in some detail how to Parallise various code fragments using the new constructs.
Loops are the easiest place to start (shortly followed thereafter with reconsidering all LINQ statements).
Software Design Principles
Established List of Design Principles:
Four founding principles of object oriented design:
Organise like themed concepts into one unit (class) that performs one task or a group of similar tasks. These units often mimic real world objects, for example an employee class may have a name attribute and a promote method. Encapsulation hides implementation details from the consumers, simplifying external use.
The best definition of abstraction I've ever read is: "An abstraction denotes the essential characteristics of an object that distinguish it from all other kinds of object and thus provide crisply defined conceptual boundaries, relative to the perspective of the viewer." -- G. Booch. Encapsulation and Abstraction are closely linked and used together. Referring to an object using an appropriate level of abstraction allows grouping of different objects together and treating them alike.
Describes various levels of abstraction of an object. A cat class could inherit from Feline, which could inherit from Mammal which could inherit from Animal etc. Each of these levels can describe attributes and actions common to all children that inherit.
By grouping different objects together that all have a common abstract parent actions can be performed on all the objects at once.