public class FanXingTest
{
public static void TestMain()
{
ValueTypePerfTest();
ReferenceTypePerfTest();
Console.ReadKey();
}
private static void ValueTypePerfTest()
{
const Int32 count = 1000000;
using (new OperationTimer("List<Int32>"))
{
List<Int32> l = new List<Int32>(count);
for (int i = 0; i <count; i++)
{
l.Add(i);
int x = l[i];
}
l = null;
}
using (new OperationTimer("ArrayList of Int32"))
{
ArrayList a = new ArrayList();
for (int i = 0; i < count; i++)
{
a.Add(i);
Int32 x = (Int32)a[i];
}
a = null;
}
}
private static void ReferenceTypePerfTest()
{
const Int32 count = 1000000;
using (new OperationTimer("List<string>"))
{
List<string> l = new List<string>(count);
for (int i = 0; i < count; i++)
{
l.Add("x");
string x = l[i];
}
l = null;
}
using (new OperationTimer("ArrayList of string"))
{
ArrayList l = new ArrayList();
for (int i = 0; i < count; i++)
{
l.Add("x");
string x =(string) l[i];
}
l = null;
}
}
}
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);
m_startTime = Stopwatch.GetTimestamp();
}
public void Dispose()
{
Console.WriteLine("{0} seconds GCs={1} {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();
}
}