A Trie is a really neat data structure for mapping sequences of characters (or bits in the general case) to values and compresses data since it is a tree structure by nature. Since URIs have many common characters e.g. http:// it should be relatively efficient to use a Trie to may raw strings to .Net Uri instances and thus cut down memory usage significantly - we hope!
There is a good implementation at http://code.google.com/p/typocalypse/source/browse/#hg%2FTrie which could be adapted and incorporated into dotNetRDF