Memory Leaks

Use this forum to discuss subjects that don't belong in the other forums.

Moderator: SciTech Software

Memory Leaks

Postby PK » Mon Mar 21, 2005 2:29 pm

Hi

I have just purchased my new copy of memory profiler and would like some information please.

I'm searching for memory leaks I have a form which holds a datagrid and every time I update the grid with new information I get the following data

Under System.Data DataColumn Live instances
Total 12 New 12 Removed 12 undisposed 144

Under System.DataTable
Total 1 New 1 Removed 1 undisposed 12

The undisposed value just keep climbing is this a memory leak
PK
 
Posts: 6
Joined: Mon Mar 21, 2005 2:13 pm

Postby Andreas Suurkuusk » Mon Mar 21, 2005 2:55 pm

The numbers presented do not indicate a memory leak. Since the number of removed instances equals the number of new instances, the memory usage of the program doesn't increase.

The Undisposed instances value only indicates the number of instances that have been garbage collected without being properly disposed. Even though it's preferable to always dispose all disposable instances, undisposed instances do not indicate a memory leak. Note that the number of undisposed instances is increased each time an instance becomes "undisposed" and it never decreases.

Failing to dispose an instance can in some cases create a memory leak, but since such an instance is not garbage collected, it will not be counted as undisposed.
Best regards,

Andreas Suurkuusk
SciTech Software AB
Andreas Suurkuusk
 
Posts: 976
Joined: Wed Mar 02, 2005 7:53 pm
Location: Sweden

UnDisposed Delta

Postby robertev » Mon Oct 10, 2005 6:33 pm

What if between two snapshots - one before opening a form and one right after closing that form - shows the following results (please check the UnDisposed):

System.IO.BinaryReader
Live Instances:
Total: 1
New: 0
Removed: 0
Delta: 0

Disposed Instances:
Total: 0
New: 0
Removed: 0
Delta: 0

UnDisposed Instances:
Total: 465
Delta: 91

If I open the same form three times and close it the delta of undisposed goes up 3x. Am I to assume that since there is a live instance and the delta of undisposed increases there is a leak - and the BinaryReader is not disposed properly?
robertev
 

Postby Andreas Suurkuusk » Mon Oct 10, 2005 8:39 pm

Since the number of New and Removed instances are 0, it doesn’t seem like you have a memory leak. Undisposed instances do not indicate that you have a memory leak. The fact that they’re undisposed indicates that they have actually been garbage collected, but without being properly disposed. Failing to dispose an instance usually result in less efficient memory utilization and lower performance, but doesn’t normally create a memory leak. A memory leak only occurs when you fail to dispose an instance whose Dispose method breaks a root path for an instance (e.g by removing itself from a global EventHandler).


In your case, the undisposed BinaryReader instances are not a problem. The BinaryReader class does not itself wrap any unmanaged resources, and it has no finalizer. The BinaryReader.Dispose does dispose its “BaseStream”, but as long as that Stream is disposed elsewhere there should not be any problem.
Best regards,

Andreas Suurkuusk
SciTech Software AB
Andreas Suurkuusk
 
Posts: 976
Joined: Wed Mar 02, 2005 7:53 pm
Location: Sweden


Return to General

Who is online

Users browsing this forum: No registered users and 2 guests

SciTech Software logo

© Copyright 2001-2016. SciTech Software AB
All rights reserved.


SciTech Software AB
Kartvägen 21
SE-175 46 Järfälla
Sweden


E-mail: mail@scitech.se

Telephone: +46-706868081

cron