Tag: 性能

arrays与列表的性能

假设你需要有一个你需要经常迭代的整数列表,而且我的意思是非常频繁的。 原因可能会有所不同,但可以说它是高容量处理的最核心环节。 一般来说,由于其大小的灵活性,可以select使用列表(列表)。 最重要的是,msdn文档声明列表在内部使用数组,并且执行速度一样快(使用Reflector快速查看)。 没关系,有一些额外的开销。 有没有人真的衡量这个? 会通过列表6M次迭代与数组相同的时间?

当不抛出exception时,是否尝试/捕获块会损害性能?

在与微软员工进行代码审查的过程中,我们遇到了try{}块中的大部分代码。 她和IT代表build议,这可能会影响代码的执行。 实际上,他们build议大部分的代码应该在try / catch块之外,只有重要的部分应该被检查。 微软员工补充说,即将发布的白皮书警告不正确的try / catch块。 我环顾四周,发现它可以影响优化 ,但似乎只适用于范围之间共享variables。 我并不是在询问代码的可维护性,甚至是处理正确的exception(这个代码无疑需要重新分解)。 我也不是指使用exception进行stream量控制,这在大多数情况下显然是错误的。 这些是重要的问题(有些更重要),但不是重点。 try / catch块在不抛出exception时如何影响性能? 编辑:我添加一个赏金。 有一些有趣的回应,但我想获得更多的意见。

我如何测量用PHP编写的代码的速度?

我怎么能说很多(哪些都做同样的工作)执行更快? 有没有一个软件来衡量呢?

recursion比循环更快吗?

我知道recursion有时候比循环更清洁,而且我不会问什么时候应该使用recursion迭代,我知道还有很多问题。 我问的是,recursion比循环更快吗? 对我来说,似乎总是可以改进一个循环,并使其比recursion函数更快地执行,因为循环没有经常设置新的堆栈帧。 我特别关注recursion是否是处理数据的正确方法,例如在二叉树中的某些sorting函数中,recursion是否更快。

优化PostgreSQL进行快速testing

我从一个典型的Rails应用程序从SQLite切换到PostgreSQL。 问题在于PG的运行规格变慢了。 在SQLite上花费了大约34秒,在PG上花了大约76秒, 比慢了2倍多 。 所以现在我想应用一些技术来使规范的性能与SQLite保持一致 ,而不需要修改代码(理想情况下只需设置连接选项,这可能是不可能的)。 从我头顶上的一些明显的事情是: RAM磁盘(用OSX上的RSpec进行良好的设置很好看) 未logging的表格(可以应用于整个数据库,所以我没有改变所有的脚本?) 正如你可能已经理解,我不关心可靠性和其他(在这里数据库只是一次性的东西)。 我需要充分利用PG,并尽可能快地完成 。 最好的答案将理想地描述这样做的技巧 ,设置和这些技巧的弊端。 更新: fsync = off + full_page_writes = off只减less时间full_page_writes = off秒(〜-16秒)。 良好的开端,但远不及34的目标。 更新2:我试图使用RAM磁盘,但性能增益是在误差范围内。 所以似乎并不值得。 更新3:*我发现最大的瓶颈,现在我的规格运行速度与SQLite的速度一样快。 问题是做了截断的数据库清理。 显然SQLite太快了。 为了“修复”,我在每次testing之前打开一个交易 ,并在最后回滚。 一些数字〜700testing。 截断:SQLite – 34s,PG – 76s。 交易:SQLite – 17s,PG – 18s。 SQLite速度提高2倍。 PG的4倍速度增加。

为什么在Python 3中“1000000000000000(1000000000000001)”这么快?

我的理解是, range()函数实际上是Python 3中的一个对象types ,它在运行中生成其内容,类似于生成器。 在这种情况下,我预料到下面这一行需要花费过多的时间,因为为了确定是否在这个范围内,需要生成四十亿个值: 1000000000000000 in range(1000000000000001) 此外:似乎不pipe我添加了多less零,计算或多或less需要相同的时间量(基本上是瞬时的)。 我也尝试过这样的事情,但计算仍然几乎是即时的: 1000000000000000000000 in range(0,1000000000000000000001,10) # count by tens 如果我试图实现我自己的范围function,结果是不是很好! def my_crappy_range(N): i = 0 while i < N: yield i i += 1 return range()对象在引擎盖下做什么使它如此之快? 编辑:这已经certificate是一个比我预期的更细致的话题 – 似乎有一段历史背后的优化range() 。 Martijn Pieters的答案是为了它的完整性而被选中的,但是也可以看一下abarnert的第一个答案 ,那就是在Python 3中对range是一个完整序列意味着什么,以及关于__contains__函数优化的潜在不一致性的一些信息/警告Python实现。 abarnert的其他答案更详细一些,并为那些对Python 3优化背后的历史感兴趣的人提供链接(并且缺乏Python 2中的xrange优化)。 由poke和wim提供的答案为有兴趣的人提供了相关的C源代码和解释。

用64位代替32位循环计数variables引入了疯狂的性能偏差

我正在寻找最快的方式来popcount大量的数据。 我遇到了一个非常奇怪的结果:将循环variables从unsigned更改为uint64_t使得我的PC上的性能下降了50%。 基准 #include <iostream> #include <chrono> #include <x86intrin.h> int main(int argc, char* argv[]) { using namespace std; if (argc != 2) { cerr << "usage: array_size in MB" << endl; return -1; } uint64_t size = atol(argv[1])<<20; uint64_t* buffer = new uint64_t[size/8]; char* charbuffer = reinterpret_cast<char*>(buffer); for (unsigned i=0; i<size; ++i) charbuffer[i] = rand()%256; […]

Oracle的加号(+)表示法和ansi JOIN表示法之间的区别?

使用oracle的加号(+)加上ANSI标准join符号的区别是什么? 性能有差别吗? 加号表示是否被弃用?

iterrows是否有性能问题?

使用大pandas时,我注意到性能很差。 这是别人经历的吗? 是否特定于iterrows,并应该避免这个函数的特定大小的数据(我正在2-3万行)? 这个关于GitHub的讨论让我相信这是在数据框中混合dtypes时造成的,但是下面这个简单的例子表明,即使在使用一个dtype(float64)的时候它也存在。 这在我的机器上需要36秒钟: import pandas as pd import numpy as np import time s1 = np.random.randn(2000000) s2 = np.random.randn(2000000) dfa = pd.DataFrame({'s1': s1, 's2': s2}) start = time.time() i=0 for rowindex, row in dfa.iterrows(): i+=1 end = time.time() print end – start 为什么vector化的操作应用得这么快? 我想必须有一些逐行迭代。 我不知道如何在我的情况下不使用iterrows(这将保存将来的问题)。 因此,如果您始终能够避免这种迭代,我将不胜感激。 我正在根据不同数据框中的数据进行计算。 谢谢! —编辑:我想运行的简化版本已被添加到下面— import pandas as pd […]

使用GC.Collect()有什么错误?

虽然我理解玩这个函数的严重含义(或者至less我认为是这样),但是我不明白为什么它会成为可敬的程序员永远不会使用的东西之一,即使是那些甚至不知道它是什么。 比方说,我正在开发一个应用程序,内存使用情况因使用者的行为而异。 应用程序生命周期可以分为两个主要阶段:编辑和实时处理。 在编辑阶段,假设创build了数十亿甚至数万亿个对象, 其中一些很小,有些则不是,有些可能有终结者,有些可能不是,并假设他们的生命期从几毫秒到长时间不等。 接下来,用户决定切换到实时阶段。 在这一点上,假设演出起着基础性的作用,而节目stream程中稍有改变就可能带来灾难性的后果。 然后通过使用对象池将对象创build减less到最小,但是,然后,GC出乎意料地响起,将其全部抛出,并且有人死亡。 问题:在这种情况下,在进入第二阶段之前调用GC.Collect()是否明智? 毕竟,这两个阶段从来没有互相重叠过,GC可能收集到的所有优化和统计数据都没有什么用处。 注意:正如你们中的一些人所指出的,.NET可能不是像这样的应用程序的最佳平台,但这超出了这个问题的范围。 目的是澄清GC.Collect()调用是否可以提高应用程序的整体行为/性能。 我们都同意,在这种情况下你会做这样的事情是非常罕见的,但是GC再次尝试猜测,大部分时间都做得很好,但这仍然是猜测。 谢谢。