考虑一下:
必要的:
//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更快.
我目前正在一个网站上工作,并且集中关注加载,处理等方面的效率和速度.
我正在使用mysqli扩展来获取我的数据库位和bobs,但我想知道输出数据集的最佳/最有效方法是什么?
目前我正在使用$ mysqli-> fetch_assoc()和foreach().阅读http://www.phpbench.com后,我知道首先计算我的数据会产生影响.(我打算在构建后进行优化)
我的问题是,将结果集转换为php数据更快.创建一个对象?数值数组?关联数组?我的想法是一个对象,但我不确定.
只是好奇,因为我不熟悉PHP内部:)
有没有人尝试使用"mysql-ssl"选项使用sysbench对MySQL进行基准测试?
我无法弄清楚sysbench在哪里查找客户端密钥,客户端证书和ca证书.您可以在此处找到sysbench手册(http://sysbench.sourceforge.net/docs/),但它没有提及证书文件的位置.
有什么想法吗?
我必须对JSON序列化时间进行基准测试,并将其与thrift和google协议缓冲区的序列化时间进行比较.
它也必须在python中.
我打算使用python profilers. http://docs.python.org/2/library/profile.html
分析器是查找函数运行时的最佳方法吗?
或者输出时间戳之前和函数调用是更好的选择?
还是有更好的方法?
提前致谢!
我有这个想法,我会使用条件运算符将我的一些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
我正在练习我的Golang,编写一个简单的Redis克隆.
我如何编写一个基准脚本,在C并发级别每秒建立X连接,以处理我的服务器协议并测量多少操作/秒?
我可以简单地编写一个实际上会执行此操作的脚本:
for i := range(1000) {
// Open connection
// Perform command
// Close connection
}
Run Code Online (Sandbox Code Playgroud)
但我想知道分配每秒并发级别的连接数背后的概念.
我希望在基准测试开始与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) 我想找到哪个更快: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) 人们已经证明无数次,这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) 我编写了一个计时函数,记录了函数的运行时间,并计算了多次运行的均值和标准差。我惊讶地发现即使是看似简单的任务(例如加两个双打)也有很高的标准偏差。我分析了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。我没有看到任何图案。

定时
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)