- Small but Good C# Xml Creation Sample - Neat sample. Shows use of returning XML as XmlWriter, XmlDocument using DOM and ADO+ DataSets
March 27, 2006
C# Xml Creation Sample
Parsing Hexadecimal
How to parse a number in Hexadecimal form
newByte = .Parse(hex, System.Globalization.NumberStyles.HexNumber);
Dispose Pattern
Explains how to implement IEnumerator and Contains basic IDispose pattern and more
Msdn Guidelines on Implementing IDisposable and Equals Operators
Design pattern for a base class with unmanaged resources.
// Design pattern for a base class with unmanaged resources.
public class Base: IDisposable
{
#region Dispose Implementation
// Use C# 'destructor' style syntax for a finalizer.
// Finalizer is only required when the class has Unmanaged resources
// but can also be used to detect memory leaks
~Base()
{
// This is defensive code to ensure that even if you forget to call Dispose() unmanaged objects stil get freed
Dispose (false); // Dispose of unmanaged resources
Debug.Assert(false, nameof(Base) + " with id of " + someId + " was not disposed of"); // Useful for detecting memory leaks
}
protected bool _isDisposed;
//Implement IDisposable.
public void Dispose()
{
Dispose(true); // Dispose of managed and unmanaged resources
GC.SuppressFinalize(this); // Not required now
}
protected virtual void Dispose(bool disposing)
{
if (_isDisposed)
return;
if (disposing)
{
// Free other state (managed objects).
}
// Free your own state (unmanaged objects).
// Set large fields to null.
_isDisposed = true;
}
#endregion Dispose Implementation
...
}
Design pattern for a derived class
// Design pattern for a derived class.
public class Derived : Base
{
#region Dispose Implementation
protected override void Dispose(bool disposing)
{
if (_isDisposed)
return;
if (disposing)
{
// Free other state (managed objects).
}
// Release unmanaged resources here
// Set large fields to null.
// Call Dispose on your base class.
base.Dispose(disposing);
}
// The derived class does not have a Finalize method
// or a Dispose method with parameters because it inherits
// them from the base class.
#endregion Dispose Implementation
}
Finally the simplest case
// Design pattern for a simple class with only small unmanaged resources.
public class SimplestDispose : IDisposable
{
#region Dispose Implementation
#region DEBUG
// Finalizer is only used to detect memory leaks
~SimplestDispose()
{
Debug.Assert(false, nameof(Base) + " with id of " + someId + " was not disposed of"); // Useful for detecting memory leaks
}
#endregion DEBUG
//Implement IDisposable.
public void Dispose()
{
// Dispose of managed resources here
#if DEBUG
GC.SuppressFinalize(this); // Not required now except for detecting memory leaks
#endif
}
#endregion Dispose Implementation
...
}
Safely Parse An Ip Address
This helper method safely parses an IP address from a string using the System.Net.IPAddress class
private static string SafeIpAddressFromString(string value)
{
if (ReferenceEquals(value, null))
value = ""; // System.Net.IPAddress.Parse cannot handle null values
System.Net.IPAddress ipAddr = System.Net.IPAddress.Parse(value);
return ipAddr.ToString();
}
March 16, 2006
Installing Windows Services
Using InstallUtil
Install: InstallUtil.exe algo.exe
Uninstall: InstallUtil.exe /u algo.exe
Batch File To Install A service
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\InstallUtil.exeBatch File To Uninstall A service
/showcallstack C:\...\bin\XXXService.exe pause
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\InstallUtil.exe /uProgrammatically Add a reference to 'System.Configuration.Install' Install:
/showcallstack C:\...\bin\XXXService.exe pause
String []installParams= {filename};
System.Configuration.Install.ManagedInstallerClass.InstallHelper(installParams);
Uninstall:
String []installParams= {"/u", filename};
System.Configuration.Install.ManagedInstallerClass.InstallHelper(installParams);
Manual Locking With Monitors
When we want to use a timed 'lock' we can not use the normal lock statement, we have to use the monitor directly.
private object someLock = new object();
...
// Here we need to execute something within a Timeout period
// but we could exceed the timeout just waiting for the lock on our object!
algo = null;
int start = System.Environment.TickCount;
bool lockAquired = Monitor.TryEnter(someLock, timeout);
if (lockAquired)
{
try
{
int elapsedTime = (System.Environment.TickCount-start);
// Did we use any time up waiting for the lock? Take it off the original timeout
// new timeout = original timeout - time expired obtaining the lock
int timeLeft = timeout - elapsedTime;
if (timeLeft > 0)
{
DoSomething(timeLeft, out algo);
}
}
finally
{
Monitor.Exit(someLock);
}
}
March 15, 2006
ASP.NET 2.0 Links
- Master Pages In ASP.NET 2.0 - Lots of other ASP.NET 2.0 stuff here as well
- Membership Providers - Good sample of read only membership information from an Xml file
- ASP.NET Menus The ASP.NET Menu control use the StaticMenuLevels property to control the number of menu levels always displayed -
Subscribe to:
Comments (Atom)