.Net memory management ndc london
Transcript of .Net memory management ndc london
Everything* youneed to know about
.NET Memory
Ben Emmett – NDC London – 4th December 2014
*Most stuff
public void CaffeineCheck(int coffeesConsumed)
{
int coffeesRequired = 3;
CaffeineAlert alert = new CaffeineAlert();
if (coffeesConsumed < coffeesRequired)
{
alert.Announce("Send help.");
}
}
CaffeineCheck (int coffeesRequired)
int coffeesRequiredint coffeesConsumed.....
[Return address]
The Stack
Alert()
CaffeineCheck()
ParentMethod()
For each thread
CaffeineCheck(int coffeesRequired)
int coffeesRequiredint coffeesConsumedCaffeineAlert alert
[Return address]
Stack
CaffeineAlertalert
public void CaffeineCheck(int coffeesConsumed)
{
int coffeesRequired = 3;
CaffeineAlert alert = new CaffeineAlert();
if (coffeesConsumed < coffeesRequired)
{
alert.Announce("Send help.");
}
}
CaffeineAlertalert
CaffeineCheck(int coffeesRequired)
int coffeesRequiredint coffeesConsumedCaffeineAlert alert
[Return address]
Stack
public class CaffeineAlert
{
private List<Contact> Recipients;
}
public class Contact
{
private string Name;
private string Email;
}
List<Contact>Recipients
Contactlist
stringName
stringEmail
Contactlist
stringName
stringEmail
CaffeineCheck(int coffeesRequired)
int coffeesRequiredint coffeesConsumedCaffeineAlert alert
[Return address]
public class CaffeineAlert
{
private List<Contact> Recipients;
}
public class Contact
{
private string Name;
private string Email;
}
WRONG
HeapStack
CaffeineCheck(int coffeesRequired)
int coffeesRequiredint coffeesConsumedCaffeineAlert alert
[Return address]
public class CaffeineAlert
{
private List<Contact> Recipients;
}
public class Contact
{
private string Name;
private string Email;
}
WRONG
HeapStack
CaffeineCheck(int coffeesRequired)
int coffeesRequiredint coffeesConsumedCaffeineAlert alert
[Return address]
public class CaffeineAlert
{
private List<Contact> Recipients;
}
public class Contact
{
private string Name;
private string Email;
}
WRONG
HeapStack
CaffeineCheck(int coffeesRequired)
int coffeesRequiredint coffeesConsumedCaffeineAlert alert
[Return address]
public class CaffeineAlert
{
private List<Contact> Recipients;
}
public class Contact
{
private string Name;
private string Email;
}
WRONG
HeapStack
CaffeineAlertalert
CaffeineCheck(int coffeesRequired)
int coffeesRequiredint coffeesConsumedCaffeineAlert alert
[Return address]
Stack
public class CaffeineAlert
{
private List<Contact> Recipients;
}
public class Contact
{
private string Name;
private string Email;
}
List<Contact>Recipients
Contactlist
stringName
stringEmail
Contactlist
stringName
stringEmail
stringname
NaughtyStringMessage(string name)
ref string name
[Return address]
Stack Heap
public void NaughtyStringMessage(string name)
{
string message = "Hello ";
message += name;
Console.WriteLine(message);
}
1
2
3
4
5
6
"Ted"
stringname
Stack Heap
public void NaughtyStringMessage(string name)
{
string message = "Hello ";
message += name;
Console.WriteLine(message);
}
stringmessage
1
2
3
4
5
6
"Ted"
"Hello"
NaughtyStringMessage(string name)
ref string messageref string name
[Return address]
stringname
Stack Heap
public void NaughtyStringMessage(string name)
{
string message = "Hello ";
message += name;
Console.WriteLine(message);
}
stringmessage
1
2
3
4
5
6
stringmessage
"Ted"
"Hello"
"Hello Ted"
NaughtyStringMessage(string name)
ref string messageref string name
[Return address]
public static event EventHandler UserLoggedOut;
Main form
MainForm.UserLoggedOut += HideFormData;
Child form
public class UnmanagedClass : IDisposable
{
public void Dispose()
{
//Clear up the unmanaged resources
GC.SuppressFinalize(this);
}
~UnmanagedClass()
{
this.Dispose();
}
} Not a complete IDisposable implementation