Sometimes, it's useful to detect when an object is garbage collected.
Garbage collection happens in a separate thread, and if you want to display some information about this, in a Windows Forms GUI, you need to use BeginInvoke
and not Invoke
or your application will "freeze".
Invoke
will not be executed during garbage collection.
#if DEBUG
private static long objectsDestroyedCounter = 0;
~Entity( )
{
objectsDestroyedCounter++;
if( (objectsDestroyedCounter % 10000) == 0)
{
LogDebug(string.Format("{0} objects dropped.",objectsDestroyedCounter) );
}
}
private static void LogDebug(string s)
{
MainForm.LogString(s);
}
#endif
Execution of the code actually displaying the information is deferred until after the garbage collector has finished.
class MainForm : Form
{
private static MainForm instance;
public MainForm()
{
....
instance = this;
}
public static MainForm Instance
{
get
{
return instance;
}
}
public static void LogString(string s)
{
MainForm mainForm = Instance;
if( mainForm != null )
{
Instance_MessageLogged(mainForm,s);
}
}
delegate void Instance_MessageLoggedDelegate(object sender, string message);
void Instance_MessageLogged(object sender, string message)
{
if (InvokeRequired)
{
BeginInvoke(new Instance_MessageLoggedDelegate (Instance_MessageLogged),
new object[] { sender, message });
}
else
{
messagesTextBox.AppendText(message);
}
}
}
I hope that it might be useful.
Chief Architect - Sea Surveillance AS.
Specializing in integrated operations and high performance computing solutions.
I’ve been fooling around with computers since the early eighties, I’ve even done work on CP/M and MP/M.
Wrote my first “real” program on a BBC micro model B based on a series in a magazine at that time. It was fun and I got hooked on this thing called programming ...
A few Highlights:
- High performance application server development
- Model Driven Architecture and Code generators
- Real-Time Distributed Solutions
- C, C++, C#, Java, TSQL, PL/SQL, Delphi, ActionScript, Perl, Rexx
- Microsoft SQL Server, Oracle RDBMS, IBM DB2, PostGreSQL
- AMQP, Apache qpid, RabbitMQ, Microsoft Message Queuing, IBM WebSphereMQ, Oracle TuxidoMQ
- Oracle WebLogic, IBM WebSphere
- Corba, COM, DCE, WCF
- AspenTech InfoPlus.21(IP21), OsiSoft PI
More information about what I do for a living can be found at:
harlinn.com or
LinkedIn
You can contact me at
espen@harlinn.no