471,319 Members | 3,302 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,319 software developers and data experts.

Handle leak in threading?

I was wondering if someone could help me understand why it seems that
creating threads using the code below causes handles to seemingly leak.

System.Threading.Thread threadRunAsync = new
System.Threading.Thread(RunFunc);
threadRunAsync.Start(listParams);

I have to use ThreadPools in order to avoid the handle leaks.

System.Threading.ThreadPool.QueueUserWorkItem(new
System.Threading.WaitCallback(RunFunc), listParams);

All I can figure is that it was done to discourage people from spawning
short lived threads and to encourage the use of thread pools. Any thoughts
that might help me understand this would be helpful. Sometimes I have items
that I'd like to run in a thread because they run for a long time and I
don't want the thread pool to be used up but I also don't want to have to
reboot my application every month either just to clear up the handles from
these threads. I thought about reverting to a whole new process for such
things but that's more painful.

Thanks

Jayme
Dec 29 '05 #1
3 7736

"Jayme Pechan" <ja**********@whitefeld.com> wrote in message
news:u%***************@TK2MSFTNGP09.phx.gbl...
I was wondering if someone could help me understand why it seems that
creating threads using the code below causes handles to seemingly leak.

System.Threading.Thread threadRunAsync = new
System.Threading.Thread(RunFunc);
threadRunAsync.Start(listParams);

I have to use ThreadPools in order to avoid the handle leaks.

System.Threading.ThreadPool.QueueUserWorkItem(new
System.Threading.WaitCallback(RunFunc), listParams);

All I can figure is that it was done to discourage people from spawning
short lived threads and to encourage the use of thread pools. Any
thoughts that might help me understand this would be helpful. Sometimes I
have items that I'd like to run in a thread because they run for a long
time and I don't want the thread pool to be used up but I also don't want
to have to reboot my application every month either just to clear up the
handles from these threads. I thought about reverting to a whole new
process for such things but that's more painful.


You are right not to use the ThreadPool for long-lived background tasks.

Spawing threads should not leak handles. Can you post a repro?

David
Dec 29 '05 #2
My bad. It looks like it eventually clears the handles. I had it get up to
16k handles with a very simple program before it cleared them. I guess I
just have to be more patient with this garbage collector thing. It sure is
difficult to tell when you have memory problems in C# programs. I use a lot
of controls that are written in C++ so I have to pay attention to this. I
guess my unit testing will have to be the final word on the handles and
memory.

Thanks for the replay.

Jayme

Dec 30 '05 #3


"Jayme Pechan" <ja**********@whitefeld.com> wrote in message
news:u%***************@TK2MSFTNGP09.phx.gbl...
I was wondering if someone could help me understand why it seems that
creating threads using the code below causes handles to seemingly leak.

System.Threading.Thread threadRunAsync = new
System.Threading.Thread(RunFunc);
threadRunAsync.Start(listParams);

I have to use ThreadPools in order to avoid the handle leaks.

System.Threading.ThreadPool.QueueUserWorkItem(new
System.Threading.WaitCallback(RunFunc), listParams);

All I can figure is that it was done to discourage people from spawning
short lived threads and to encourage the use of thread pools. Any
thoughts that might help me understand this would be helpful. Sometimes I
have items that I'd like to run in a thread because they run for a long
time and I don't want the thread pool to be used up but I also don't want
to have to reboot my application every month either just to clear up the
handles from these threads. I thought about reverting to a whole new
process for such things but that's more painful.

Thanks

Jayme


Handles are unmanaged resources, it's your responsability to "dispose" them
of when you are done with them. If you don't, you may exhaust the handle
object pool before the GC comes along.

Willy.
Dec 30 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by Bob Smith | last post: by
reply views Thread by dudi | last post: by
12 posts views Thread by Ken Brubaker | last post: by
10 posts views Thread by Manfred Braun | last post: by
1 post views Thread by =?Utf-8?B?QU1lcmNlcg==?= | last post: by
3 posts views Thread by Godzilla | last post: by
reply views Thread by rosydwin | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.