Tag: 性能

在PHP中跟踪脚本执行时间

PHP必须跟踪特定脚本为了执行max_execution_time限制而使用的CPU时间量。 有没有一种方法可以访问脚本的内部? 我想包括一些logging与我的testing有关多lessCPU在实际的PHP烧(时间不会增加,当脚本是坐着等待数据库)。 我正在使用Linux机器。

什么是通过pandas循环数据框的最有效的方法?

我想以顺序的方式对数据框中的财务数据执行我自己的复杂操作。 例如,我正在使用以下来自雅虎财经的 MSFT CSV文件: Date,Open,High,Low,Close,Volume,Adj Close 2011-10-19,27.37,27.47,27.01,27.13,42880000,27.13 2011-10-18,26.94,27.40,26.80,27.31,52487900,27.31 2011-10-17,27.11,27.42,26.85,26.98,39433400,26.98 2011-10-14,27.31,27.50,27.02,27.27,50947700,27.27 …. 然后我做了以下几点: #!/usr/bin/env python from pandas import * df = read_csv('table.csv') for i, row in enumerate(df.values): date = df.index[i] open, high, low, close, adjclose = row #now perform analysis on open/close based on date, etc.. 那是最有效的方法吗? 考虑到pandas的速度的重点,我会假设必须有一个特殊的函数遍历值的方式,也可以检索索引(可能通过一个生成器是内存效率)? df.iteritems不幸的是只能逐列迭代。

为什么要引入无用的MOV指令可以加速x86_64程序集中的紧密循环?

背景: 当用embedded汇编语言优化一些Pascal代码时,我注意到一个不必要的MOV指令,并将其删除。 令我惊讶的是,删除不必要的指令导致我的程序放慢速度 。 我发现添加任意的,无用的MOV指令可以进一步提高性能 。 效果是不稳定的,并根据执行顺序进行更改: 相同的垃圾指令由单行上下移动会产生减速 。 我了解CPU可以进行各种优化和精简,但是,这看起来更像黑魔法。 数据: 我的代码版本有条件地编译运行2**20==1048576次循环中间的三个垃圾操作 。 (周围的程序只是计算SHA-256散列)。 我的老机器(Intel(R)Core(TM)2 CPU 6400 @ 2.13 GHz)上的结果如下: avg time (ms) with -dJUNKOPS: 1822.84 ms avg time (ms) without: 1836.44 ms 程序循环运行25次,每次运行顺序随机更改。 摘抄: {$asmmode intel} procedure example_junkop_in_sha256; var s1, t2 : uint32; begin // Here are parts of the SHA-256 algorithm, in Pascal: […]

LINQ:没有任何与所有不

通常我想检查提供的值是否与列表中的值匹配(例如,validation时): if (!acceptedValues.Any(v => v == someValue)) { // exception logic } 最近,我注意到ReSharper要求我简化这些查询: if (acceptedValues.All(v => v != someValue)) { // exception logic } 显然,这在逻辑上是相同的,也许稍微有点可读性(如果你已经做了很多的math),我的问题是:这是否会导致性能下降? 它感觉就像应该(即.Any()听起来像短路,而.All()听起来像不),但我没有什么证实这一点。 有没有人对这些疑问是否能解决问题有更深入的了解,或者ReSharper是否把我引入歧途?

使用C ++ 11的“自动”可以提高性能吗?

我可以看到为什么C ++ 11中的autotypes提高了正确性和可维护性。 我读过,它也可以提高性能( 几乎总是自动通过香草萨特),但我想念一个很好的解释。 auto如何提高性能? 任何人都可以举个例子吗?

线程vs Linux中的进程

我最近听到一些人说,在Linux中,使用进程而不是线程几乎总是比较好,因为Linux在处理进程方面非常高效,并且因为与线程相关联的问题太多(如locking)。 但是,我很怀疑,因为在某些情况下线程似乎可以带来相当大的性能提升。 所以我的问题是,当遇到线程和进程可以很好处理的情况时,我应该使用进程还是线程? 例如,如果我正在编写Web服务器,是否应该使用进程或线程(或组合)?

为什么检查字典是否包含密钥更快,而不是在exception情况下捕获exception?

想象一下代码: public class obj { // elided } public static Dictionary<string, obj> dict = new Dictionary<string, obj>(); 方法1 public static obj FromDict1(string name) { if (dict.ContainsKey(name)) { return dict[name]; } return null; } 方法2 public static obj FromDict2(string name) { try { return dict[name]; } catch (KeyNotFoundException) { return null; } } 我很好奇,这两个函数的性能是否有差别,因为第一个函数应该比第二个函数小 – 这是因为如果字典包含一个值,它需要检查两次,而第二个函数只需要访问字典一次,但是WOW,它实际上是相反的: […]

为什么处理sorting数组比sorting数组慢?

我有一个500000个随机生成的Tuple<long,long,string>对象的列表,我正在执行一个简单的“between”search: var data = new List<Tuple<long,long,string>>(500000); … var cnt = data.Count(t => t.Item1 <= x && t.Item2 >= x); 当我生成我的随机数组并运行search100个随机生成的x值时,search将在大约四秒钟内完成。 知道sortingsearch的好处 ,然而,我决定先sorting我的数据 – 首先是Item1 ,然后是Item2 ,最后是Item3 – 在运行我的100次search之前。 由于分支预测,我预计分类后的版本会执行得更快一些:我的想法是,一旦我们到达了Item1 == x ,对t.Item1 <= x所有进一步检查都会正确地预测分支为“no采取“,加快了search的尾部。 令我惊讶的是, search花了两倍的时间在一个有序的数组上 ! 我尝试转换我运行实验的顺序,并为随机数生成器使用了不同的种子,但效果相同:在未sorting数组中的search运行速度几乎是同一数组中search的两倍,但sorting! 有没有人有这个奇怪的效果很好的解释? 我的testing源代码如下; 我正在使用.NET 4.0。 private const int TotalCount = 500000; private const int TotalQueries = 100; private […]

启用C ++ 11时,std :: vector的性能回归

当我启用C ++ 11时,我在一个小的C ++代码片段中发现了一个有趣的性能回归: #include <vector> struct Item { int a; int b; }; int main() { const std::size_t num_items = 10000000; std::vector<Item> container; container.reserve(num_items); for (std::size_t i = 0; i < num_items; ++i) { container.push_back(Item()); } return 0; } 用g ++(GCC)4.8.2 20131219(prerelease)和C ++ 03我得到: milian:/tmp$ g++ -O3 main.cpp && perf stat -r 10 ./a.out […]

三元运算符是一个if-else块的两倍?

我到处读到,三元运算符应该比其相当的if – else块更快,或者至less相同。 但是,我做了以下testing,发现情况并非如此: Random r = new Random(); int[] array = new int[20000000]; for(int i = 0; i < array.Length; i++) { array[i] = r.Next(int.MinValue, int.MaxValue); } Array.Sort(array); long value = 0; DateTime begin = DateTime.UtcNow; foreach (int i in array) { if (i > 0) { value += 2; } else { value […]