I already saw your comment where you insist that you dispose all disposable objects.
For a record: I'm sure the bucket-based hash can be well implemented using pure CLI, with no unmanaged code.
Now, what else?
You can generate a memory leak in pure managed code. Do you have anything static in your library or even if you test application?
If not, look at anything with long life time. You can simply accumulate some references and such object and never release them. GC need totally lost references to act.
Remember, managed code memory leaks are quite possible. It's not so trivial to defined what's a leak. Basically, it only makes sense you do some cycles and come back to some state which is functionally equivalent to the previous state, but the consumed memory is more then in the first time. This is not so apparent because GC may defer reclaiming memory until more convenient later moment of time. For more clear experiment you can use
System.GC
to force garbage collection at some check points using
System.GC.Collect
, see
http://msdn.microsoft.com/en-us/library/system.gc.aspx[
^].
Also, you can consider using
weak references
,
http://msdn.microsoft.com/en-us/library/system.weakreference.aspx[
^].
—SA