Hi Ole,
Before we get into the specifics of the garbage collection, it's worth noting that _how_ you measure memory usage can be important.
(You've specifically mentioned this, but I mention it here for other readers of this thread.)
Windows is clever and at times won't report memory as being "free'd" unless it needs it for something else. So even if a program "frees" memory, windows cunningly leaves it allocated to the program on the grounds that "he may need it again". It's only if another app _needs_ the memory that it gets (visually) released.
So, especially using task manager, you have to be careful exactly "what" memory you are looking at.
Now onto the internals -
As you know there is a SessionQueue. When an "old" session is detected it is removed. A session gets "old" when it hasn't been "touched" for a period of time. The length of the period is set on the Web Server procedure extension (advanced tab.) The default is 10 or 15 minutes, but often developers (including myself) extend this to 24 hours, or even 72 hours - depending on the nature of your site.
It sounds to me like
a) your session timeout time may be quite high and
b) perhaps the session value is _not_ being sent on your timer url. A worst-case scenario would be that you have a timer on a page, but each instance of the timer starts a new session. I don't think this would happen with the "built in" timer functions, but if you were calling a timer manually - or calling the server from a "non browser" then you would want to ensure that you were always passing the session id correctly.
Cheers
Bruce