The Linq to Sql Profiler
This is something I actually need to try. Apparently, the guys at stackoverflow.com recommend it.
This is something I actually need to try. Apparently, the guys at stackoverflow.com recommend it.
Carlo Colombo walks through WinDBG to prove that Generics with references types share method tables. It's a good intro to WinDBG and some .NET Generic information. It's always good to review the basics with a proof.
Yesterday, I was having a whale of a time getting WinDBG to load the correct DLLs to let SOS do it's job in a 1.1 gig minidump.
This blog post is a summary of the symptoms I was seeing. The basic problem is I just didn't have the correct mscordacwks.dll for the minidump. Fortunately, another dev (way more experiences in WinDBG) already had ran into this and gave me the DLL versions. What Microsoft doesn't tell you is that their DLL database doesn't keep everything.
This List of .NET Framework versions shows there are way more versions than just one. .NET was supposed to fix "DLL Hell" by having side-by-side versioning. This actually does work. BUT. Whenever Microsoft releases, say a Service Pack for .NET 2.0 (like SP2 for the 2.0 DLLs was released in .NET 3.5 SP1) they REPLACE the old assemblies with the new ones with the same strong name. If there was simply a new strong name, then everything would be fine.
Would it be? Probably not. If I had a strong named application against SP1 but a person only had SP0, then my app could definitely not work for that person. My answer is probably the wrong one, but why not just require SP1 and have a mechanism in-place to say so?
I think the answer is that DLL Hell is just then pushed to end-users versus making developers have to manage it. I say, share the pain. Strong named applications would have problems but non-strongly named applications would just use "whatever is latest." Kind of how it works now, right?
As for the problem I was solving by looking at the dump. It was a memory consumption problem that just boils down to this: If you're using a compiled Regex class, make sure it's only created once. Do not make it an instance field on a highly used class.