Can I abandon the lock on .SyncRoot and lock a collection directly? Less available memory in 2.0?

  • Thread starter Thread starter DC
  • Start date Start date
D

DC

Hi,

I am porting an app from Framework 1.1 to 2.0 and I am now using
Dictionary objects instead of Hashtables. There are some

lock (theHashtable.SyncRoot)

statements in the 1.1 code and I replaced those by

lock (theDictionary)

statements. I did not note a difference, but I wanted to ask if this
generates any issues like more granular locking.

I swapped out the Hashtable in the first place because I was hoping
that this would safe some memory. I am observing the following: under
1.1, my app is using p to 1300 MB of memory and running fine. With
2.0, the app is now using about 1100 MB of memory and then starts
throwing "out of memory" exceptions (2GB RAM Windows 2003 machines). I
have not found a way to solve this by cofiguration, and I am therefore
trying to save RAM now. Can someone recommend a really easy method to
profile which objects use what amount of RAM?

TIA for any hints,

Regards
DC
 
Hi DC,

Try running this program, but with a much smaller data set -- it adds a lot
of overhead.

ClrProfiler:http://www.microsoft.com/downloads/details.aspx?familyid=A362781C-387...

Log dumper for ClrProfiler logs:http://blogs.msdn.com/ricom/articles/449244.aspx

Regards,
Frank Hileman

check out VG.net:http://www.vgdotnet.com
Animated vector graphics system
Integrated Visual Studio graphics editor














- Zitierten Text anzeigen -

Thank you for the pointers, Frank. I am currently checking out CLR
Profiler.

Regards
DC
 
Hi DC,

Try running this program, but with a much smaller data set -- it adds a lot
of overhead.

ClrProfiler:http://www.microsoft.com/downloads/details.aspx?familyid=A362781C-387...

Log dumper for ClrProfiler logs:http://blogs.msdn.com/ricom/articles/449244.aspx

Regards,
Frank Hileman

check out VG.net:http://www.vgdotnet.com
Animated vector graphics system
Integrated Visual Studio graphics editor














- Zitierten Text anzeigen -

I tried CLR Profiler. It does - of course - bog down the system
heavily and builds a 10GB or so trace file rather quickly. It then
takes quiet a while to create graphs from that and I am frankly not
expert enough to interpret what I get then. I get the accumulated size
of all strings and stuff like that.

What I need is a simple way to periodically dump out the total size of
some objects. E.g. I need to know how fast a certain instance of a
dictionary grows.

I am now trying .Net Memory Profiler 3.0 but maybe someone knows a
simple way to get some object sizes; or has designed a routine that
iterates through a collection and sums up the sizes of all objects
contained therein.

Regards
DC
 
Hi,

I finally fixed the problem. ".Net Memory Profiler" was a beeze to use
and helped to locate the problem quickly.

I was using a class derived from streamwriter. The streamwriter was
always constructed with a 2MB buffer. In Framework 1.1 the garbage
collector disposed those objects correctly. In Framework 2.0 I could
see those objects pile up forever.

I then modified the code and now the class does not derive from
streamwriter anymore. Instead I am simply using a textwriter as a
field of my class to write data.

Thanks again, Regards
DC
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top