草庐IT

多得多

全部标签

python - 为什么复制洗牌列表要慢得多?

复制一个随机的range(10**6)列表十次大约需要0.18秒:(这是五次运行)0.1755970176610.1737314031980.1786017115940.1803309129520.180811964451将未洗牌的列表复制十次大约需要0.05秒:0.0584022359730.05054646368560.05097343069340.05260227527440.0513324916184这是我的测试代码:fromtimeitimporttimeitimportrandoma=range(10**6)random.shuffle(a)#Removethisforth

java - Java 10 (Centos) 上的 RandomAccessFile.setLength 慢得多

以下代码publicclassMain{publicstaticvoidmain(String[]args)throwsIOException{Filetmp=File.createTempFile("deleteme","dat");tmp.deleteOnExit();RandomAccessFileraf=newRandomAccessFile(tmp,"rw");for(intt=0;t在Java8上,这运行良好(文件在tmpfs上,所以你会认为它是微不足道的)Averagecalltime1us.Averagecalltime0us.Averagecalltime0us.Av

java - 为什么 Collections.sort() 比 Arrays.sort() 慢得多?

我尝试对Collection.sort()和Arrays.sort()进行测试。在测试中,我创建了一个长度为1e5100次的int数组,其中包含从1到1e5的随机数。我还创建了一个Integer类型的列表,它在与数组相同的位置包含相同的值。然后我使用Arrays.sort()对数组进行排序,并使用Collections.sort()对列表进行排序。更新:正如@Holger指出的那样,我的代码有一个错误。现在更正的代码是:importjava.util.*;classTestClass{publicstaticvoidmain(Stringargs[])throwsException{d

.net - C++ ~ 1M 在 unordered_map 中使用字符串键查找比 .NET 代码慢得多

我有一个性能测试函数的.NET和C++实现,它使用来自6838个键的池中的字符串键在字典中进行854,750次查找。我编写了这些函数来调查实际应用程序中的性能瓶颈。.NET实现是用F#编写的,使用Dictionary并针对.NET4.0编译C++实现使用std::unordered_map并在Release模式下使用VS2010构建。在我的机器上,.NET代码平均运行240毫秒,C++代码平均运行630毫秒。能否请您帮助我了解造成速度如此巨大差异的原因是什么?如果我在C++实现中缩短key长度并使用“key_”前缀而不是“key_prefix_”,它将在140毫秒内运行。我尝试的另一个

c++ - 为什么 std::atomic<bool> 比 volatile bool 慢得多?

多年来我一直在使用volatilebool进行线程执行控制,效果很好//inmyclassdeclarationvolatileboolstop_;-----------------//Inthethreadfunctionwhile(!stop_){do_things();}现在,由于C++11增加了对原子操作的支持,我决定尝试一下//inmyclassdeclarationstd::atomicstop_;-----------------//Inthethreadfunctionwhile(!stop_){do_things();}但它比volatilebool慢几个数量级!我编

performance - 为什么在 Golang 中迭代 map 比迭代 slice 慢得多?

我在Golang中使用map实现了一个稀疏矩阵,我注意到在排除其他可能的原因之后,我的代码开始需要更长的时间才能完成此更改,似乎罪魁祸首是map本身的迭代。GoPlaygroundlink(由于某种原因不起作用)。packagemainimport("fmt""time""math")funcmain(){z:=50000000a:=make(map[int]int,z)b:=make([]int,z)fori:=0;i迭代超过50M项会返回以下时间:alix@local:~/Go/src$goversiongoversiongo1.3.3linux/amd64alix@local:~

linux - 在新的 linux 内核中上下文切换要慢得多

我们希望将我们服务器上的操作系统从Ubuntu10.04LTS升级到Ubuntu12.04LTS。不幸的是,从2.6内核到3.2内核,运行已变为可运行的线程的延迟似乎显着增加。事实上,我们得到的延迟数字令人难以置信。让我更具体地说明测试。我们有一个运行两个线程的程序。第一个线程获取当前时间(使用RDTSC以滴答为单位),然后每秒发送一次条件变量信号。第二个线程等待条件变量并在收到信号时唤醒。然后它获取当前时间(使用RDTSC以滴答为单位)。计算第二个线程中的时间与第一个线程中的时间之间的差异并显示在控制台上。此后,第二个线程再次等待条件变量。大约第二次通过后,第一个线程将再次发出信号。

Java 使用比堆大小多得多的内存(或正确大小的 Docker 内存限制)

对于我的应用程序,Java进程使用的内存远大于堆大小。运行容器的系统开始出现内存问题,因为容器占用的内存远多于堆大小。堆大小设置为128MB(-Xmx128m-Xms128m),而容器最多占用1GB内存。正常情况下需要500MB。如果docker容器的限制低于(例如mem_limit=mem_limit=400MB),则该进程会被操作系统的内存不足杀手杀死。你能解释一下为什么Java进程使用的内存比堆多得多吗?如何正确调整Docker内存限制的大小?有没有办法减少Java进程的堆外内存占用?我使用来自NativememorytrackinginJVM的命令收集了有关该问题的一些详细信息

c++ - 为什么转置 512x512 的矩阵比转置 513x513 的矩阵慢得多?

在对不同大小的方阵进行了一些实验之后,出现了一种模式。总是,转置大小为2^n的矩阵比转置大小为2^n+1的矩阵要慢。对于n的小值,差别不大。然而,在512的值上会出现很大的差异。(至少对我而言)免责声明:我知道由于元素的双重交换,该函数实际上并没有转置矩阵,但它没有区别。按照代码:#defineSAMPLES1000#defineMATSIZE512#include#includeintmat[MATSIZE][MATSIZE];voidtranspose(){for(inti=0;i改变MATSIZE让我们改变大小(呃!)。我在ideone上发布了两个版本:大小512-平均2.46毫

python - 为什么在 C++ 中从标准输入读取行比 Python 慢得多?

我想比较使用Python和C++从标准输入读取字符串输入的行数,并震惊地发现我的C++代码的运行速度比等效的Python代码慢一个数量级。由于我的C++生疏了,而且我还不是Python专家,请告诉我我做错了什么或误解了什么。(TLDR答案:包含以下语句:cin.sync_with_stdio(false)或直接使用fgets。TLDR结果:一直向下滚动到我的问题底部并查看表格。)C++代码:#include#includeusingnamespacestd;intmain(){stringinput_line;longline_count=0;time_tstart=time(NULL