Tag: 性能

为什么HashSet <Point>比HashSet <string>慢得多?

我想存储一些像素位置而不允许重复,所以首先想到的是HashSet<Point>或类似的类。 然而,与HashSet<string>类似,这似乎很慢。 例如,这个代码: HashSet<Point> points = new HashSet<Point>(); using (Bitmap img = new Bitmap(1000, 1000)) { for (int x = 0; x < img.Width; x++) { for (int y = 0; y < img.Height; y++) { points.Add(new Point(x, y)); } } } 大约需要22.5秒。 虽然下面的代码(这显然不是一个好的select)只需要1.6秒: HashSet<string> points = new HashSet<string>(); using (Bitmap img = new Bitmap(1000, […]

如何从ArrayList或String数组中删除所有的null元素?

我试着用这样的循环 // ArrayList tourists for (Tourist t : tourists) { if (t != null) { t.setId(idForm); } } 但这并不好。 任何人都可以build议我一个更好的解 一些有用的基准做出更好的决定: While循环,For循环和Iterator性能testing

应该尝试…赶上循环内部或外部?

我有一个循环,看起来像这样: for (int i = 0; i < max; i++) { String myString = …; float myNum = Float.parseFloat(myString); myFloats[i] = myNum; } 这是一个方法的主要内容,其唯一目的是返回浮点数组。 我想要这个方法返回null如果有错误,所以我把循环放在一个try…catch块中,像这样: try { for (int i = 0; i < max; i++) { String myString = …; float myNum = Float.parseFloat(myString); myFloats[i] = myNum; } } catch (NumberFormatException ex) { return […]

内联汇编语言比本机C ++代码慢吗?

我试图比较内联汇编语言和C ++代码的性能,所以我编写了一个函数来添加两个大小为2000的数组100000次。 代码如下: #define TIMES 100000 void calcuC(int *x,int *y,int length) { for(int i = 0; i < TIMES; i++) { for(int j = 0; j < length; j++) x[j] += y[j]; } } void calcuAsm(int *x,int *y,int lengthOfArray) { __asm { mov edi,TIMES start: mov esi,0 mov ecx,lengthOfArray label: mov edx,x push edx mov […]

“内存泄漏”剖析

在.NET的angular度来看: 什么是内存泄漏 ? 你如何确定你的应用程序是否泄漏? 有什么影响? 你怎么能防止内存泄漏? 如果您的应用程序有内存泄漏,当进程退出或死亡时它会消失吗? 或者即使在进程完成后,应用程序中的内存泄漏也会影响系统上的其他进程? 那么通过COM Interop和/或P / Invoke访问非托pipe代码呢? 我自己对这些问题有一些答案,但是它们不完整。 你怎么看?

Bluebird的util.toFastProperties函数如何使对象的属性“快速”?

在Bluebird的util.js文件中 ,它有以下function: function toFastProperties(obj) { /*jshint -W027*/ function f() {} f.prototype = obj; ASSERT("%HasFastProperties", true, obj); return f; eval(obj); } 出于某种原因,返回函数之后有一个声明,我不知道为什么它在那里。 同样,这似乎是故意的,因为提交人已经沉默了JSHint对此的警告: “返回”后无法到达'eval'。 (W027) 这个函数到底做了什么? util.toFastProperties是否真的使对象的属性“更快”? 我已经通过Bluebird的GitHub仓库search了源代码中的任何评论或者在他们的问题列表中的解释,但我找不到任何。

迪斯尼的FastPass有效和/或有用的排队理论

在迪斯尼世界,他们使用Fastpass系统为受欢迎的游乐设施制作第二条较短的路线。 这个想法是,你可以等待标准线,经常等待一个多小时,或者你可以得到一个FastPass,它允许你在指定的时间段内(通常在几个小时之后)回来,只等10分钟或更less。 您只能使用FastPass一次“等”一次。 我一直在试图弄清楚这个概念背后的排队理论,但是我发现唯一的解释是它的目的是让人们脱离线路,做一些会带来额外收入的东西(购物,吃东西等等)。 这就是为什么FastPass被实现的原因,还是存在真正的游客效率问题? 有没有应用软件类似的逻辑? 有软件应用程序应该应用类似的逻辑吗? 我看到在软件中实现类似的问题的一部分是,它是基于用户select他们的队列。 为了在软件中实现更快的等待周期,我认为这个理论的一个很好的应用将要求应用程序足够聪明,根据自己的需求知道将什么队列放入,而不需要最终用户的select。

一个快速的方法来解释一个double到一个32位整数

当读Lua的源代码的时候,我注意到Lua使用一个macro来将一个double加到一个32位int 。 我提取macro ,它看起来像这样: union i_cast {double d; int i[2]}; #define double2int(i, d, t) \ {volatile union i_cast u; ud = (d) + 6755399441055744.0; \ (i) = (t)ui[ENDIANLOC];} 这里ENDIANLOC被定义为字节序 , 0表示小端, 1表示大端。 Lua仔细处理sorting。 t表示整数types,如int或unsigned int 。 我做了一点研究,有一个更简单的macro格式,使用相同的想法: #define double2int(i, d) \ {double t = ((d) + 6755399441055744.0); i = *((int *)(&t));} 或者以C ++风格: inline int […]

string列表到一个string

让我们说你有一个: List<string> los = new List<string>(); 在这个疯狂的function世界中,我们生活在这些日子里,其中一个最好的方式是通过连接这些来创build一个string: String.Join(String.Empty, los.ToArray()); StringBuilder builder = new StringBuilder(); los.ForEach(s => builder.Append(s)); string disp = los.Aggregate<string>((a, b) => a + b); 或简单的旧的StringBuilder的foreach 或者,还有更好的方法?

为什么转置512×512的matrix要比转置513×513的matrix慢得多?

在不同大小的matrix上进行了一些实验之后,出现了一个模式。 不变地, 转置大小为2^n的matrix比转置大小为2^n+1的matrix要慢 。 对于n小值,差异不是很大。 然而,在512的值上会出现很大的差异(至less对我而言) 免责声明:我知道这个函数实际上并没有将matrix转置,因为元素的双重交换,但是没有什么区别。 遵循代码: #define SAMPLES 1000 #define MATSIZE 512 #include <time.h> #include <iostream> int mat[MATSIZE][MATSIZE]; void transpose() { for ( int i = 0 ; i < MATSIZE ; i++ ) for ( int j = 0 ; j < MATSIZE ; j++ ) { int aux = mat[i][j]; mat[i][j] […]