Tag: 性能

秒表与使用System.DateTime.Now计时事件

我想跟踪我的代码的性能,所以我使用System.DateTime.Now存储开始和结束时间。 我把两者之间的区别作为执行代码的时间。 我注意到,虽然差异似乎并不准确。 所以我尝试使用Stopwatch对象。 事实certificate这要更准确得多。 谁能告诉我为什么Stopwatch会比使用System.DateTime.Now计算开始和结束时间之间的差异更准确? 顺便说一句,我不是在说十分之一的百分比。 我得到大约15-20%的差异。

Pythonstring“join”比“+”更快(?),但这里有什么问题?

我在前面的post中询问了用于大规模dynamicstring连接的最有效的方法,并且我build议使用连接方法,这是最好的,最简单和最快速的方法(正如大家所说的那样)。 但是当我玩string连接时,我发现了一些奇怪的(?)结果。 我确定有些事情正在进行,但我不能完全理解。 这是我做的: 我定义了这些函数: import timeit def x(): s=[] for i in range(100): # Other codes here… s.append("abcdefg"[i%7]) return ''.join(s) def y(): s='' for i in range(100): # Other codes here… s+="abcdefg"[i%7] return s def z(): s='' for i in range(100): # Other codes here… s=s+"abcdefg"[i%7] return s def p(): s=[] for i in […]

什么是在一个位置或更低位置计数设置位的有效方法?

给定std::bitset<64> bits ,设置任意数量的位并将位位置X (0-63) 在X位或更低位计数位的最有效方法是什么,如果X位没有设置则返回0 注意:如果该位被设置,返回将总是至less为1 蛮力的方式很慢: int countupto(std::bitset<64> bits, int X) { if (!bits[X]) return 0; int total=1; for (int i=0; i < X; ++i) { total+=bits[i]; } return total; } bitset的count()方法会给你所有位的popcount ,但是bitset不支持范围 注意:这不是一个重复的如何计算一个32位整数的设置位数? 因为这要求所有的位不是从0到X的范围

通过空matrix乘法初始化数组更快的方法? (Matlab的)

我偶然发现了奇怪的方式(在我看来)Matlab正在处理空matrix 。 例如,如果两个空matrix相乘,结果是: zeros(3,0)*zeros(0,3) ans = 0 0 0 0 0 0 0 0 0 现在,这已经让我吃惊了,但是,一个快速的search让我看到了上面的链接,并且解释了为什么会发生这种有些扭曲的逻辑。 但是 ,没有任何东西准备好我的观察。 我问自己,这种types的乘法与仅使用zeros(n)函数有多高效,比如初始化的目的呢? 我用timeit来回答这个问题: f=@() zeros(1000) timeit(f) ans = 0.0033 VS: g=@() zeros(1000,0)*zeros(0,1000) timeit(g) ans = 9.2048e-06 两者的结果都是1000×1000的二级零matrix,但是空matrix乘法一个是〜350倍! (类似的结果发生使用tic和toc和一个循环) 这怎么可能? 是timeit或tic,toc虚张声势还是我find了一个更快的方法来初始化matrix? (这是用matlab 2012a完成的,在win7-64机器上,intel-i5 650 3.2Ghz …) 编辑: 在阅读您的反馈之后,我更仔细地研究了这个特性,并在两台不同的计算机(相同的matlab ver 2012a)上testing了一个代码,用于检查运行时间与matrixn的大小。 这是我得到的: 与以前一样生成这个使用的timeit的代码,但是一个循环与tic和toc看起来是一样的。 所以,对于小尺寸, zeros(n)是可比较的。 然而,在n=400左右,空matrix乘法的性能有所提高。 我用来生成该图的代码是: n=unique(round(logspace(0,4,200))); for k=1:length(n) […]

迭代二维数组的嵌套循环的顺序更有效率

在时间(高速caching性能)方面,下列哪个嵌套循环顺序遍历二维数组更有效? 为什么? int a[100][100]; for(i=0; i<100; i++) { for(j=0; j<100; j++) { a[i][j] = 10; } } 要么 for(i=0; i<100; i++) { for(j=0; j<100; j++) { a[j][i] = 10; } }

如何在不使用Session的情况下跨ASP.net传递值

我正在努力提高我的门户网站的性能。 我使用Session来存储状态信息。 但是我听说使用会话会降低应用程序的速度。 是否有任何其他方式在整个页面在asp.net中传递值。

简单的Python挑战:数据缓冲区上最快的按位异或

挑战: 在两个相同大小的缓冲区上执行按位XOR。 缓冲区将被要求是python strtypes,因为这是传统的python中的数据缓冲区的types。 返回结果值作为一个str 。 尽可能快地做到这一点。 input是两个1兆字节(2 ** 20字节)string。 我们面临的挑战是使用python或现有的第三方python模块(宽松的规则:或者创build自己的模块) 大幅度地打败我低效的algorithm。边际增长是无用的。 from os import urandom from numpy import frombuffer,bitwise_xor,byte def slow_xor(aa,bb): a=frombuffer(aa,dtype=byte) b=frombuffer(bb,dtype=byte) c=bitwise_xor(a,b) r=c.tostring() return r aa=urandom(2**20) bb=urandom(2**20) def test_it(): for x in xrange(1000): slow_xor(aa,bb)

在C#中控制结构'for'和'foreach'的性能差异

哪个代码片段可以提供更好的性能? 下面的代码段是用C#编写的。 1。 for(int counter=0; counter<list.Count; counter++) { list[counter].DoSomething(); } 2。 foreach(MyType current in list) { current.DoSomething(); }

斯卡拉懒惰的val的(隐藏)成本是多less?

Scala的一个便利function是lazy val ,其中lazy val的评估被延迟,直到有必要(在第一次访问时)。 当然,一个lazy val必须有一些开销 – 在某处Scala必须跟踪是否已经评估了该值,并且评估必须同步,因为多个线程可能会同时尝试首次访问该值。 lazy val的成本究竟是什么 – 是否有一个隐藏的布尔标志与一个lazy val跟踪,如果它已经被评估或没有跟踪,什么是同步的,是否有更多的成本? 另外,假设我这样做: class Something { lazy val (x, y) = { … } } 这是相同的有两个单独的lazy val的x和y或我得到的开销只有一次,对(x, y) ?

在c ++中快速读取文本文件

我目前正在用c ++编写一个程序,其中包括阅读大量的大文本文件。 每行至less有400,000行,极端情况下每行有4000或更多字符。 为了testing,我使用ifstream和cplusplus.com提供的实现来阅读其中的一个文件。 花了大约60秒,这太长了。 现在我想知道,是否有一个简单的方法来提高阅读速度? 编辑:我使用的代码是或多或less这个: string tmpString; ifstream txtFile(path); if(txtFile.is_open()) { while(txtFile.good()) { m_numLines++; getline(txtFile, tmpString); } txtFile.close(); } 编辑2:我读的文件只有82 MB大。 我主要说可能达到4000,因为我觉得可能有必要知道为了做缓冲。 编辑3:谢谢大家的回答,但看起来好像没有太大的空间来改善我的问题。 我不得不使用readline,因为我想要计算行数。 将ifstream实例化为二进制不会使读取速度更快。 我会尽可能地并行化,至less应该起作用。 编辑4:所以显然有一些事情我可以。 非常感谢你把这么多的时间放在这里,我很感激! =)