gpt4 book ai didi

c# - C# 的常见操作成本?

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

Code Complete 2 (第 601 和 602 页)有一张“常见操作成本”表。

基线操作整数赋值赋值为 1,然后针对 Java 和 C++ 列出常见操作的相对时间。例如:

                                  C++        Java
Integer assignment 1 1
Integer division 5 1.5
Floating point square root 15 4

问题是有人得到了 C# 的这些数据吗?我知道这些不会具体帮助我解决任何问题,我只是好奇。

最佳答案

我实现了书中的一些测试。来 self 电脑的一些原始数据:

测试运行#1:

测试整数分配 00:00:00.6680000
TestCallRoutineWithNoParameters 00:00:00.9780000
TestCallRoutineWithOneParameter 00:00:00.6580000
TestCallRoutineWithTwoParameters 00:00:00.9650000
测试整数加法 00:00:00.6410000
测试整数减法 00:00:00.9630000
测试整数乘法 00:00:00.6490000
TestIntegerDivision 00:00:00.9720000
TestFloatingPointDivision 00:00:00.6500000
TestFloatingPointSquareRoot 00:00:00.9790000
TestFloatingPointSine 00:00:00.6410000
TestFloatingPointLogarithm 00:00:41.1410000
TestFloatingPointExp 00:00:34.6310000

测试运行#2:

测试整数分配 00:00:00.6750000
TestCallRoutineWithNoParameters 00:00:00.9720000
TestCallRoutineWithOneParameter 00:00:00.6490000
TestCallRoutineWithTwoParameters 00:00:00.9750000
测试整数加法 00:00:00.6730000
测试整数减法 00:00:01.0300000
TestIntegerMultiplication 00:00:00.7000000
TestIntegerDivision 00:00:01.1120000
TestFloatingPointDivision 00:00:00.6630000
TestFloatingPointSquareRoot 00:00:00.9860000
TestFloatingPointSine 00:00:00.6530000
TestFloatingPointLogarithm 00:00:39.1150000
TestFloatingPointExp 00:00:33.8730000

测试运行#3:

测试整数分配 00:00:00.6590000
TestCallRoutineWithNoParameters 00:00:00.9700000
TestCallRoutineWithOneParameter 00:00:00.6680000
TestCallRoutineWithTwoParameters 00:00:00.9900000
测试整数加法 00:00:00.6720000
测试整数减法 00:00:00.9770000
测试整数乘法 00:00:00.6580000
TestIntegerDivision 00:00:00.9930000
TestFloatingPointDivision 00:00:00.6740000
TestFloatingPointSquareRoot 00:00:01.0120000
TestFloatingPointSine 00:00:00.6700000
TestFloatingPointLogarithm 00:00:39.1020000
TestFloatingPointExp 00:00:35.3560000

(每个基准测试 10 亿次测试,使用 Optimize、AMD Athlon X2 3.0ghz 编译,使用 Jon Skeet 的微基准测试框架,位于 http://www.yoda.arachsys.com/csharp/benchmark.html)

来源:

class TestBenchmark  
{
[Benchmark]
public static void TestIntegerAssignment()
{
int i = 1;
int j = 2;

for (int x = 0; x < 1000000000; x++)
{
i = j;
}
}

[Benchmark]
public static void TestCallRoutineWithNoParameters()
{
for (int x = 0; x < 1000000000; x++)
{
TestStaticRoutine();
}
}

[Benchmark]
public static void TestCallRoutineWithOneParameter()
{
for (int x = 0; x < 1000000000; x++)
{
TestStaticRoutine2(5);
}
}

[Benchmark]
public static void TestCallRoutineWithTwoParameters()
{
for (int x = 0; x < 1000000000; x++)
{
TestStaticRoutine3(5,7);
}
}

[Benchmark]
public static void TestIntegerAddition()
{
int i = 1;
int j = 2;
int k = 3;

for (int x = 0; x < 1000000000; x++)
{
i = j + k;
}
}

[Benchmark]
public static void TestIntegerSubtraction()
{
int i = 1;
int j = 6;
int k = 3;

for (int x = 0; x < 1000000000; x++)
{
i = j - k;
}
}

[Benchmark]
public static void TestIntegerMultiplication()
{
int i = 1;
int j = 2;
int k = 3;

for (int x = 0; x < 1000000000; x++)
{
i = j * k;
}
}


[Benchmark]
public static void TestIntegerDivision()
{
int i = 1;
int j = 6;
int k = 3;

for (int x = 0; x < 1000000000; x++)
{
i = j/k;
}
}

[Benchmark]
public static void TestFloatingPointDivision()
{
float i = 1;
float j = 6;
float k = 3;

for (int x = 0; x < 1000000000; x++)
{
i = j / k;
}
}

[Benchmark]
public static void TestFloatingPointSquareRoot()
{
double x = 1;
float y = 6;

for (int x2 = 0; x2 < 1000000000; x2++)
{
x = Math.Sqrt(6);
}
}

[Benchmark]
public static void TestFloatingPointSine()
{
double x = 1;
float y = 6;

for (int x2 = 0; x2 < 1000000000; x2++)
{
x = Math.Sin(y);
}
}

[Benchmark]
public static void TestFloatingPointLogarithm()
{
double x = 1;
float y = 6;

for (int x2 = 0; x2 < 1000000000; x2++)
{
x = Math.Log(y);
}
}

[Benchmark]
public static void TestFloatingPointExp()
{
double x = 1;
float y = 6;

for (int x2 = 0; x2 < 1000000000; x2++)
{
x = Math.Exp(6);
}
}

private static void TestStaticRoutine() {

}

private static void TestStaticRoutine2(int i)
{

}

private static void TestStaticRoutine3(int i, int j)
{

}

private static class TestStaticClass
{

}

关于c# - C# 的常见操作成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/872442/

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