The following code causes memory to leak forever until the program eventually crashes:
static void Main(string args)
var cache = HttpRuntime.Cache;
//Keep inserting new arrays into the cache with the same key
cache.Insert("key", new byte, null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(1));
Console.WriteLine("Used memory = " + GC.GetTotalMemory(true));
This happens because when you insert into the cache, it never releases its reference to the previous object you're replacing. The bug can be worked-around by calling Remove("key") before inserting.
I verified it leaks in mono 184.108.40.206, but I'm pretty sure it leaks in trunk too. It doesn't leak on Microsoft's implementation of Cache. The issue does not have anything to do with what garbage collector is used -- the caching code seems to keep references to the objects.
I found this when porting an asp.net application to mod_mono. This application frequently updated cache items with new objects, and as a result, this bug caused mono to leak away all 4gb of the server's memory after just a couple hours.