我正在做MCTS Exames70-536Microsft .Net框架应用程序开发基础的练习题,其中一个问题是创建两个类,一个泛型,一个对象类型,这两个类都执行相同的事情;其中一个循环使用该类并迭代数千次。并使用计时器,对两者的性能进行计时。在C# generics question上还有另一个帖子也在寻找同样的问题,但没有人回复。
基本上,如果在我的代码中,我首先运行泛型类,它需要loger来处理。如果我先运行object类,那么处理object类所需的时间会更长。整个想法是为了证明泛型执行得更快。
我使用原始的用户代码来节省一些时间。我没有特别看到代码中有任何错误,并且对结果感到困惑。有人能解释一下为什么会出现这种不寻常的结果吗?
谢谢,
Risho
代码如下:
class Program
{
class Object_Sample
{
public Object_Sample()
{
Console.WriteLine("Object_Sample Class");
}
public long getTicks()
{
return DateTime.Now.Ticks;
}
public void display(Object a)
{
Console.WriteLine("{0}", a);
}
}
class Generics_Samle<T>
{
public Generics_Samle()
{
Console.WriteLine("Generics_Sample Class");
}
public long getTicks()
{
return DateTime.Now.Ticks;
}
public void display(T a)
{
Console.WriteLine("{0}", a);
}
}
static void Main(string[] args)
{
long ticks_initial, ticks_final, diff_generics, diff_object;
Object_Sample OS = new Object_Sample();
Generics_Samle<int> GS = new Generics_Samle<int>();
//Generic Sample
ticks_initial = 0;
ticks_final = 0;
ticks_initial = GS.getTicks();
for (int i = 0; i < 50000; i++)
{
GS.display(i);
}
ticks_final = GS.getTicks();
diff_generics = ticks_final - ticks_initial;
//Object Sample
ticks_initial = 0;
ticks_final = 0;
ticks_initial = OS.getTicks();
for (int j = 0; j < 50000; j++)
{
OS.display(j);
}
ticks_final = OS.getTicks();
diff_object = ticks_final - ticks_initial;
Console.WriteLine("\nPerformance of Generics {0}", diff_generics);
Console.WriteLine("Performance of Object {0}", diff_object);
Console.ReadKey();
}
}发布于 2011-01-03 22:35:33
为什么它会更快呢?两个in都必须装箱才能使用Console.WriteLine(string,object)
编辑: ToString()本身似乎不会导致装箱http://weblogs.asp.net/ngur/archive/2003/12/16/43856.aspx
所以当你使用Console.WriteLine(A)时;它会调用Console.WriteLine(Int32),我想这应该是可行的(我需要查看反射器来确认这一点)
https://stackoverflow.com/questions/4585280
复制相似问题