0 down vote favorite
i have memory leak when using ConcurrentQueue :
requestObject request = xxx;
Item obj= new Item ();
obj.MessageReceived += obj_MessageReceived;
obj.Exited += obj_Exited;
request.Key = obj.Key;
In the "Exited" callback, i dispose the resource :
void LiveSphere_Exited(string key)
_queue.TryRemove(key, out instance);
var wait = new SpinWait();
while (instance.MessageCount > 0)
if (instance != null)
instance.MessageReceived -= obj_MessageReceived;
instance.Exited -= obj_Exited;
instance = null;
When i profile the code, i still have a root referenced "Item" object but i don't know where i can dispose..., The exited method is triggered and the _queue has removed the "Item" object from the queue.
When i read documentation, the concurrentqueue copy the reference into the queue.
Can you help me to find out where the memory leak is?