gpt4 book ai didi

c# - 泛型与对象性能

转载 作者:太空狗 更新时间:2023-10-29 22:03:26 26 4
gpt4 key购买 nike

我正在做 MCTS 考试 70-536 Microsft .Net Framework Application Dev Foundation 的练习题,其中一个问题是创建两个类,一个是通用的,一个是执行相同操作的对象类型;其中一个循环使用该类并迭代了数千次。而使用定时器,计时两者的表现。在 C# generics question 有另一个帖子寻求相同的问题,但没有人回答。

基本上,如果在我的代码中我首先运行通用类,它需要记录器来处理。如果我先运行对象类,那么对象类需要更长的时间来处理。整个想法是为了证明泛型性能更快。

我使用原始用户代码来节省时间。我没有发现代码有什么特别的问题,并且对结果感到困惑。有人可以解释为什么会出现异常结果吗?

谢谢,

理硕

代码如下:

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();
}
}

最佳答案

好吧,我看到的第一个问题是您正在使用 DateTime 对象来测量应用程序中的时间(非常小的间隔)。

您应该使用 Stopwatch类(class)。它在尝试对代码进行基准测试时提供更高的精度。

第二个问题是您不允许使用 JIT(即时编译)。第一次调用您的代码将花费更长的时间,因为它必须是 JIT。之后,您将获得结果。

我会在您开始计时之前对您的代码进行一次调用,这样您就可以准确了解循环期间发生的事情。

关于c# - 泛型与对象性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4585280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com