Utils
Mix two hash code to produce a new hash code
消影:
Code
消影:
消影
忘记加的WM_SETREDRAW值了:
public const int WM_SETREDRAW = 0x000B;
抓起Dump文件:
Code
详细可见:如何让程序抓到dump文件,MiniDumpWriteDump 一文
Timer (摘自 《CLR Via C#》)
Timer
// This class is useful for doing operation performance timing
internal sealed class OperationTimer : IDisposable
{
private Int64 m_startTime;
private String m_text;
private Int32 m_collectionCount;
public OperationTimer(String text)
{
PrepareForOperation();
m_text = text;
m_collectionCount = GC.CollectionCount(0);
// This should be the last statement in this
// method to keep timing as accurate as possible
m_startTime = Stopwatch.GetTimestamp();
}
public void Dispose()
{
Console.WriteLine("{0,6:###.00} seconds (GCs={1,3}) {2}", (Stopwatch.GetTimestamp() - m_startTime) / (Double)Stopwatch.Frequency,
GC.CollectionCount(0) - m_collectionCount, m_text);
}
private static void PrepareForOperation()
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
}
internal sealed class OperationTimer : IDisposable
{
private Int64 m_startTime;
private String m_text;
private Int32 m_collectionCount;
public OperationTimer(String text)
{
PrepareForOperation();
m_text = text;
m_collectionCount = GC.CollectionCount(0);
// This should be the last statement in this
// method to keep timing as accurate as possible
m_startTime = Stopwatch.GetTimestamp();
}
public void Dispose()
{
Console.WriteLine("{0,6:###.00} seconds (GCs={1,3}) {2}", (Stopwatch.GetTimestamp() - m_startTime) / (Double)Stopwatch.Frequency,
GC.CollectionCount(0) - m_collectionCount, m_text);
}
private static void PrepareForOperation()
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
}