public class SampleBenchmarkSuite {
[Params(1000)] ⇽--- 避免编译器优化
public int A;
[Params(35)] ⇽---
public int B;
[Benchmark] ⇽--- 用属性标记要进行基准测试的操作
public int Manual() {
int division = A / B;
int remainder = A % B;
return division + remainder; ⇽--- 我们将值返回,这样编译器就不会丢掉计算步骤
}
[Benchmark] ⇽---
public int DivRem() {
int division = Math.DivRem(A, B, out int remainder);
return division + remainder; ⇽---
}
}
using System;
using System.Diagnostics;
using BenchmarkDotNet.Running;
namespace SimpleBenchmarkRunner {
public class Program {
public static void Main(string[] args) {
BenchmarkRunner.Run<SampleBenchmarkSuite>();
}
}
}
4.3.6.2. Math.DivRem()的速度是分别进行除法和求余操作的两倍
4.3.6.3. 使用Stopwatch编写自己的基准测试程序
4.3.6.4. C#
private const int iterations = 1_000_000_000;
private static void runBenchmarks() {
var suite = new SampleBenchmarkSuite {
A = 1000,
B = 35
};
long manualTime = runBenchmark(() => suite.Manual());
long divRemTime = runBenchmark(() => suite.DivRem());
reportResult("Manual", manualTime);
reportResult("DivRem", divRemTime);
}
private static long runBenchmark(Func<int> action) {
var watch = Stopwatch.StartNew();
for (int n = 0; n < iterations; n++) {
action(); ⇽--- 我们在这里调用基准测试代码
}
watch.Stop();
return watch.ElapsedMilliseconds;
}
private static void reportResult(string name, long milliseconds) {
double nanoseconds = milliseconds * 1_000_000;
Console.WriteLine("{0} = {1}ns / operation",
name,
nanoseconds / iterations);
}
一、SPI的概念
1.1、什么是API?
API在我们日常开发工作中是比较直观可以看到的,比如在 Spring 项目中,我们通常习惯在写 service 层代码前,添加一个接口层,对于 service 的调用一般也都是基于接口操作,通…
一、Linux 中断简介
1. Linux 中断 API 函数
① 中断号 每个中断都有一个中断号,通过中断号可以区分出不同的中断。在 Linux 内核中使用一个 int 变量表示中断号。 ② request_irq 函数 在 Linux 中想要使用某个中断是需要申请的,request_irq 函数就是…
MySQL中的数据类型 常见数据类型的属性: 整数类型
整数类型一共有 5 种,包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT。
CREATE TABLE test_int1 ( X TINYINT, y SMALLINT, z MEDIUMINT, m INT, n BIGINT );…