What steps will reproduce the problem?
Semaphore limit = new Semaphore(100, 100);
ThreadPool.SetMaxThreads(102, 102);
ThreadPool.SetMinThreads(102, 102);
for (int i = 0; i < 15000; ++i)
{
limit.WaitOne();
#if false
var gauth = new Google.Apis.Authentication.OAuth2LeggedAuthenticator(consumerKey, consumerSecret, "username", "example.org");
var svc = new Google.Apis.Calendar.v3.CalendarService(gauth);
svc.CalendarList.List().FetchAsync(req => { try { req.GetResult(); } finally { limit.Release(); } });
#else
var req = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("http://www.google.com");
req.BeginGetResponse((iar) => { try { var req_ = (System.Net.HttpWebRequest)iar.AsyncState; req_.EndGetResponse(iar).Close(); } finally { limit.Release(); } }, (object)req);
#endif
}
Console.WriteLine("Press a key . . .");
Console.ReadKey();
What is the expected output? What do you see instead?
See attached memory usage graphs attained via ProcessExplorer.
One run is using a real domain account to request information for. Memory is
leaked and never reclaimed.
The other run is using a non-existent user to test the WebException case. Much
more memory is leaked than the non-exceptional case and is never reclaimed.
Switch the `#if true` to `#if false` to see that the private memory baseline is
around 120MB for a max of 100 threads working on requesting the www.google.com
homepage.
What version of the product are you using? On what operating system?
Google.Apis.Calendar.v3.dll, 1.1.4344.23403
Windows 7 Enterprise x64, .NET 3.5SP1
Please provide any additional information below.
I need to allocate this many CalendarService instances because I'm using 2LO
and have to vary the username I request information for. I have on the order of
10,000s of users in my domain to make requests on behalf of.
Original issue reported on code.google.com by james.jdunne@gmail.com on 20 Feb 2012 at 9:36
Original issue reported on code.google.com by
james.jdunne@gmail.com
on 20 Feb 2012 at 9:36Attachments: