标签: benchmarking

为什么List <T> .ForEach比标准foreach更快?

考虑一下:

必要的:

//The alphabet from a-z
List<char> letterRange = Enumerable.Range('a', 'z' - 'a' + 1)
.Select(i => (Char)i).ToList(); //97 - 122 + 1 = 26 letters/iterations
Run Code Online (Sandbox Code Playgroud)

标准foreach:

foreach (var range in letterRange)
{
    Console.Write(range + ",");
}
Console.Write("\n");
Run Code Online (Sandbox Code Playgroud)

内置的foreach:

letterRange.ForEach(range => Console.Write(range + ",")); //delegate(char range) works as well
Console.Write("\n");
Run Code Online (Sandbox Code Playgroud)

我已经尝试过将它们相互对准,并且内置的foreach速度提高了2倍,这似乎很多.

我用Google搜索过,但我似乎无法找到任何答案.

另外,关于:在.NET中,哪个循环运行得更快,'for'或'foreach'?

for (int i = 0; i < letterRange.Count; i++)
{
    Console.Write(letterRange[i] + ",");
}
Console.Write("\n");
Run Code Online (Sandbox Code Playgroud)

据我所知,不执行比标准foreach更快.

.net c# foreach benchmarking list

2
推荐指数
2
解决办法
3806
查看次数

对象与数组

我目前正在一个网站上工作,并且集中关注加载,处理等方面的效率和速度.

我正在使用mysqli扩展来获取我的数据库位和bobs,但我想知道输出数据集的最佳/最有效方法是什么?

目前我正在使用$ mysqli-> fetch_assoc()和foreach().阅读http://www.phpbench.com后,我知道首先计算我的数据会产生影响.(我打算在构建后进行优化)

我的问题是,将结果集转换为php数据更快.创建一个对象?数值数组?关联数组?我的想法是一个对象,但我不确定.

只是好奇,因为我不熟悉PHP内部:)

php benchmarking mysqli

2
推荐指数
1
解决办法
752
查看次数

sysbench与SSL?

有没有人尝试使用"mysql-ssl"选项使用sysbench对MySQL进行基准测试?

我无法弄清楚sysbench在哪里查找客户端密钥,客户端证书和ca证书.您可以在此处找到sysbench手册(http://sysbench.sourceforge.net/docs/),但它没有提及证书文件的位置.

有什么想法吗?

mysql ssl benchmarking

2
推荐指数
1
解决办法
609
查看次数

在python中对运行时进行基准测试

我必须对JSON序列化时间进行基准测试,并将其与thrift和google协议缓冲区的序列化时间进行比较.

它也必须在python中.

我打算使用python profilers. http://docs.python.org/2/library/profile.html

分析器是查找函数运行时的最佳方法吗?

或者输出时间戳之前和函数调用是更好的选择?

还是有更好的方法?

提前致谢!

python benchmarking

2
推荐指数
1
解决办法
2111
查看次数

如果与有条件的速度比较

我有这个想法,我会使用条件运算符将我的一些if块转换为单行.但是,我想知道是否存在速度差异.我运行了以下测试:

static long startTime;
static long elapsedTime;
static String s;

public static void main(String[] args) {
    startTime = System.nanoTime();
    s = "";
    for (int i= 0; i < 1000000000; i++) {
        if (s.equals("")) {
            s = "";
        }
    }

    elapsedTime = System.nanoTime() - startTime;

    System.out.println("Type 1 took this long: " + elapsedTime + " ns");

    startTime = System.nanoTime();
    s = "";
    for (int i= 0; i < 1000000000; i++) {
        s = (s.equals("") ? "" : s);
    }

    elapsedTime = …
Run Code Online (Sandbox Code Playgroud)

java benchmarking if-statement conditional-operator microbenchmark

2
推荐指数
2
解决办法
361
查看次数

如何在Go中编写基准脚本来测量ops/sec

我正在练习我的Golang,编写一个简单的Redis克隆.

我如何编写一个基准脚本,在C并发级别每秒建立X连接,以处理我的服务器协议并测量多少操作/秒?

我可以简单地编写一个实际上会执行此操作的脚本:

for i := range(1000) {
    // Open connection
    // Perform command
    // Close connection
}
Run Code Online (Sandbox Code Playgroud)

但我想知道分配每秒并发级别的连接数背后的概念.

performance benchmarking go

2
推荐指数
1
解决办法
247
查看次数

谷歌基准定制主

我希望在基准测试开始与Google的基准库一起运行之前调用自定义主函数.所以我可以设置好几件事.我搜索了很多,但我找不到任何东西.我应该手动修改宏吗?或者只是使用我的main函数并自己初始化基准测试.这会以任何方式影响库初始化吗?有没有其他方法可以不要求我修改该宏或复制它的内容?

benchmark\benchmark_api.h

// Helper macro to create a main routine in a test that runs the benchmarks
#define BENCHMARK_MAIN()                   \
  int main(int argc, char** argv) {        \
    ::benchmark::Initialize(&argc, argv);  \
    ::benchmark::RunSpecifiedBenchmarks(); \
  }
Run Code Online (Sandbox Code Playgroud)

c++ benchmarking

2
推荐指数
1
解决办法
1478
查看次数

代码和性能的顺序

我想找到哪个更快:struct vs array.所以我编写了一个GO代码,在其中我将4个int值(1,2,3和4)写入结构的成员,然后写入长度为4的数组.我试图找到写入所需的时间.

案例1:首先,我将值写入结构,然后写入数组.在这里,我发现数组比结构更快.

package main

import (
    "fmt"
    "time"
)

type abc struct {
    a, b, c, d int
}

func main() {

    var obj abc

    t1 := time.Now()
    obj.a = 1
    obj.b = 2
    obj.c = 3
    obj.d = 4
    t2 := time.Since(t1)

    fmt.Println("Struct access time: : ", t2)

    a := make([]int, 4)
    t3 := time.Now()
    a[0] = 1
    a[1] = 2
    a[2] = 3
    a[3] = 4
    t4 := time.Since(t3)

    fmt.Println("Array access time: : ", t4)

} …
Run Code Online (Sandbox Code Playgroud)

performance benchmarking struct go slice

2
推荐指数
1
解决办法
409
查看次数

悖论:为什么收益率的回报快于此处的列表

人们已经证明无数次,这yield return比人们慢list.

示例:"收益率回报"是否慢于"旧学校"回归?

然而,当我尝试一个基准测试时,我得到了相反的结果:

Results:
TestYield: Time =1.19 sec
TestList : Time =4.22 sec
Run Code Online (Sandbox Code Playgroud)

在这里,List慢了400%.无论大小如何都会发生 这毫无意义.

IEnumerable<int> CreateNumbers() //for yield
{
    for (int i = 0; i < Size; i++) yield return i;
}

IEnumerable<int> CreateNumbers() //for list
{
    var list = new List<int>();
    for (int i = 0; i < Size; i++) list.Add(i);
    return list;
}
Run Code Online (Sandbox Code Playgroud)

以下是我如何使用它们:

foreach (var value in CreateNumbers()) sum += value;
Run Code Online (Sandbox Code Playgroud)

我使用所有正确的基准规则来避免冲突的结果,所以这不是问题.

如果你看到底层代码,yield return是一个状态机憎恶,但它更快.为什么?

编辑:所有答案都复制了,确实Yield比列表更快.

New Results With …
Run Code Online (Sandbox Code Playgroud)

c# performance benchmarking

2
推荐指数
2
解决办法
145
查看次数

为什么在运行时添加两个值会有如此高的可变性?

我编写了一个计时函数,记录了函数的运行时间,并计算了多次运行的均值和标准差。我惊讶地发现即使是看似简单的任务(例如加两个双打)也有很高的标准偏差。我分析了python中的数据(请参见图)。C ++输出是19.6171 ns +/- 21.9653ns (82799807 runs)使用以下命令编译的:

gcc version 8.3.0 (Debian 8.3.0-19)
/usr/bin/c++ -O3 -DNDEBUG -std=gnu++17
Run Code Online (Sandbox Code Playgroud)

整个测试是在我的个人计算机上完成的,该计算机不是空闲的而是运行DE,浏览器,IDE和其他进程。测试期间有可用的RAM。我的带有HT的双核CPU空闲率低于10%。
在这种情况下,是否会出现从20 ns的平均值到50 µs的峰值?

运行时间图
这是的内容std::vector<double> run_times。我没有看到任何图案。 运行时图

运行时间的直方图
注意log y轴(此bin中的样本数)。 运行时间直方图

定时

gcc version 8.3.0 (Debian 8.3.0-19)
/usr/bin/c++ -O3 -DNDEBUG -std=gnu++17
Run Code Online (Sandbox Code Playgroud)

计时文件

#include <cstdint>
#include <ostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <chrono>
#include <numeric>
#include <fstream>


struct TimingResults{
    // all time results are in nanoseconds
    double mean;
    double standard_deviation;
    uint64_t number_of_runs;
};


std::ostream& operator<<(std::ostream& os, const TimingResults& results);


template …
Run Code Online (Sandbox Code Playgroud)

c++ benchmarking timing

2
推荐指数
1
解决办法
81
查看次数