我想通过将代码放入方法而不是仅仅调用它来测试丢失了多少时间。
令我惊讶的是,方法调用更快,我问自己:为什么?
这是代码: HObject是图像处理库“Halcon”的一部分,在方法调用中非常常与“out”一起使用,因此不要担心可怕的外观; - )
static void Main(string[] args)
{
int runs = 900000;
HObject hob1;
HObject hob2;
HObject hob3;
HObject hob4;
HObject hob5;
HObject hob6;
DateTime t1 = DateTime.Now;
for ( int i = 0; i < runs; i++ )
{
doItMethod(out hob1, out hob2, out hob3, out hob4, out hob5, out hob6);
}
TimeSpan ts1 = TimeSpan.FromTicks(DateTime.Now.Ticks - t1.Ticks);
DateTime t2 = DateTime.Now;
for ( int i = 0; i < runs; i++ )
{
HOperatorSet.GenEmptyObj(out hob1);
HOperatorSet.GenEmptyObj(out hob2);
HOperatorSet.GenEmptyObj(out hob3);
HOperatorSet.GenEmptyObj(out hob4);
HOperatorSet.GenEmptyObj(out hob5);
HOperatorSet.GenEmptyObj(out hob6);
hob1.Dispose();
hob2.Dispose();
hob3.Dispose();
hob4.Dispose();
hob5.Dispose();
hob6.Dispose();
}
TimeSpan ts2 = TimeSpan.FromTicks(DateTime.Now.Ticks - t2.Ticks);
Console.WriteLine("Zeitspanne Methodenaufruf : " + ts1.TotalMilliseconds.ToString());
Console.WriteLine("Zeitspanne direkter Aufruf: " + ts2.TotalMilliseconds.ToString());
Console.ReadKey();
}
static void doItMethod(out HObject hobOut1, out HObject hobOut2, out HObject hobOut3, out HObject hobOut4, out HObject hobOut5, out HObject hobOut6)
{
HOperatorSet.GenEmptyObj(out hobOut1);
HOperatorSet.GenEmptyObj(out hobOut2);
HOperatorSet.GenEmptyObj(out hobOut3);
HOperatorSet.GenEmptyObj(out hobOut4);
HOperatorSet.GenEmptyObj(out hobOut5);
HOperatorSet.GenEmptyObj(out hobOut6);
hobOut1.Dispose();
hobOut2.Dispose();
hobOut3.Dispose();
hobOut4.Dispose();
hobOut5.Dispose();
hobOut6.Dispose();
}
答案 0 :(得分:1)
您应该使用Stopwatch
//add using System.Diagnostics;
public static void Main()
{
int runs = 900000;
HObject hob1;
HObject hob2;
HObject hob3;
HObject hob4;
HObject hob5;
HObject hob6;
Stopwatch t1 = new Stopwatch();
t1.Start();
for ( int i = 0; i < runs; i++ )
{
doItMethod(out hob1, out hob2, out hob3, out hob4, out hob5, out hob6);
}
t1.Stop();
Stopwatch t2 = new Stopwatch();
t2.Start();
for ( int i = 0; i < runs; i++ )
{
HOperatorSet.GenEmptyObj(out hob1);
HOperatorSet.GenEmptyObj(out hob2);
HOperatorSet.GenEmptyObj(out hob3);
HOperatorSet.GenEmptyObj(out hob4);
HOperatorSet.GenEmptyObj(out hob5);
HOperatorSet.GenEmptyObj(out hob6);
hob1.Dispose();
hob2.Dispose();
hob3.Dispose();
hob4.Dispose();
hob5.Dispose();
hob6.Dispose();
}
t2.Stop();
Console.WriteLine("Zeitspanne Methodenaufruf : " + t1.ElapsedMilliseconds);
Console.WriteLine("Zeitspanne direkter Aufruf: " + t2.ElapsedMilliseconds);
Console.ReadKey();
}
答案 1 :(得分:0)
我使用秒表得到了正确的结果:
Method: 00:00:04.5573170
Code: 00:00:04.5539918
static void Main(string[] args)
{
int runs = 1000;
HObject hob1;
HObject hob2;
HObject hob3;
HObject hob4;
HObject hob5;
HObject hob6;
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < runs; i++)
{
doItMethod(out hob1, out hob2, out hob3, out hob4, out hob5, out hob6);
}
sw.Stop();
Console.WriteLine(sw.Elapsed);
sw = Stopwatch.StartNew();
for (int i = 0; i < runs; i++)
{
HOperatorSet.GenEmptyObj(out hob1);
HOperatorSet.GenEmptyObj(out hob2);
HOperatorSet.GenEmptyObj(out hob3);
HOperatorSet.GenEmptyObj(out hob4);
HOperatorSet.GenEmptyObj(out hob5);
HOperatorSet.GenEmptyObj(out hob6);
hob1.Dispose();
hob2.Dispose();
hob3.Dispose();
hob4.Dispose();
hob5.Dispose();
hob6.Dispose();
}
sw.Stop();
Console.WriteLine(sw.Elapsed);
Console.ReadKey();
}
答案 2 :(得分:0)
谢谢大家!我得到了答案。
正如Eugen Rieck所怀疑的那样,这是一个GC神器。
实施垃圾收集使方法调用版本比直接代码慢。