Questions tagged «performance»

对于与代码的度量或改进以及应用程序效率有关的问题。

3
在网络面板的Google Chrome浏览器时间轴中,时间是什么意思?
通常,在使用Google Chrome浏览器的网络面板对性能进行故障排除时,我会看到不同的时间,并且常常想知道它们的含义。 有人可以验证我是否正确理解了以下内容: 阻止:时间由浏览器针对同一域限制的多次请求阻止(???) 等待中:正在等待来自服务器的连接(???) 发送:将文件从服务器传输到浏览器所花费的时间(???) 接收:浏览器分析和解码文件所花费的时间(???) DNS查找:解析主机名所花费的时间。 连接:建立套接字连接所花费的时间。 现在有人将如何解决长时间的阻止? 现在有人将如何解决漫长的等待时间?

5
如何加快将项目添加到ListView的速度?
我要在WinForms ListView中添加几千个(例如53,709个)项目。 尝试1:13,870 ms foreach (Object o in list) { ListViewItem item = new ListViewItem(); RefreshListViewItem(item, o); listView.Items.Add(item); } 这非常糟糕。最明显的第一个解决方法是致电BeginUpdate/EndUpdate。 尝试2:3,106 ms listView.BeginUpdate(); foreach (Object o in list) { ListViewItem item = new ListViewItem(); RefreshListViewItem(item, o); listView.Items.Add(item); } listView.EndUpdate(); 这样比较好,但是仍然慢了一个数量级。让我们将创建ListViewItems与添加ListViewItems分开,以便找到真正的罪魁祸首: 尝试3:2,631 ms var items = new List<ListViewItem>(); foreach (Object o …

6
if语句vs if-else语句,哪个更快?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 改善这个问题 前几天,我和一个朋友争论了这两个片段。哪个更快,为什么? value = 5; if (condition) { value = 6; } 和: if (condition) { value = 6; } else { value = 5; } 如果value是矩阵怎么办? 注意:我知道它value = condition ? 6 : 5;存在,并且我希望它会更快,但这不是一个选择。 编辑(由于问题暂时搁置,因此被工作人员要求): 请通过考虑由主流编译器(例如g ++,clang ++,vc,mingw)以优化和非优化版本生成的x86程序集或MIPS程序集来回答。 当汇编不同时,请解释为什么版本更快以及何时发布(例如“更好,因为没有分支且分支不会出现问题”)

16
Google Analytics(分析)是否有性能开销?
Google Analytics(分析)在多大程度上影响性能? 我正在寻找以下内容: 基准(包括响应时间/页面加载时间等) 链接或结果到类似基准 在您的网站上测试Google Analytics(分析)的一种(可能)方法: 通过您自己的服务器提供ga.js(Google Analytics(分析)JavaScript文件)。 从Google Daily(测试1)和Weekly(测试2)进行更新。 我很想知道这如何减少客户端Web服务器和GA服务器之间的通信。 有人进行过这些测试吗?如果可以,您能否提供结果?如果不是,是否有人有更好的方法来测试使用GA所带来的性能下降(或没有下降)?

4
bcp / BULK INSERT与表值参数的性能
BULK INSERT由于架构已更改,我将不得不使用SQL Server的命令重写一些相当旧的代码,我想到也许我应该考虑改用TVP切换到存储过程,但是我想知道会有什么效果它可能会影响性能。 一些背景信息可能有助于解释为什么我问这个问题: 数据实际上是通过Web服务输入的。该Web服务将文本文件写入数据库服务器上的共享文件夹,该文件夹随后执行BULK INSERT。此过程最初是在SQL Server 2000上实现的,当时实际上除了INSERT在服务器上删除几百条语句外,别无选择,这实际上是原始过程,并且会造成性能灾难。 数据被批量插入到永久登台表中,然后合并到更大的表中(此后将从登台表中删除)。 要插入的数据量是“大”的,而不是“巨大的”-通常只有几百行,在极少数情况下可能是5-10k行。因此,我的直觉是,BULK INSERT作为一个未记录的操作不会有太大的不同(但我当然不确定,因此是问题)。 插入实际上是更大的流水线批处理过程的一部分,需要连续多次进行。因此性能是至关重要的。 我想将其替换BULK INSERT为TVP的原因是: 通过NetBIOS编写文本文件可能已经花费了一些时间,并且从体系结构的角度来看这是非常可怕的。 我认为可以(并且应该)取消登台表。造成这种情况的主要原因是,插入的数据需要在插入的同时用于其他两次更新,而尝试从大量生产表进行更新要比使用几乎为空的登台要昂贵得多表。对于TVP,参数基本上是临时表,我可以在主插入之前/之后使用它进行任何操作。 我几乎可以消除重复检查,清理代码以及与批量插入相关的所有开销。 如果服务器一次获得一些事务,则无需担心登台表或tempdb上的锁争用(我们尝试避免这种情况,但它确实发生了)。 显然,在将任何产品投入生产之前,我将对此进行概要分析,但是我认为在我度过所有时间之前先询问一下是一个好主意,看看是否有人为此发布使用TVP的严厉警告。 所以-对于任何对SQL Server 2008足够熟悉的人尝试过或至少对此进行过调查,那么结论是什么?对于插入(例如几百到几千行)的情况,TVP是否会切芥菜?与散装刀片相比,性能有显着差异吗? 更新:现在问号减少了92%! (又称:测试结果) 经过36阶段的部署过程之后,最终结果现已投入生产。两种解决方案都经过了广泛的测试: 提取共享文件夹代码并SqlBulkCopy直接使用该类; 使用TVP切换到存储过程。 以便读者可以了解到底经过了什么测试,以消除对这些数据的可靠性的任何疑问,这是对该导入过程实际作用的更详细说明: 从通常约20至50个数据点的时间数据序列开始(尽管有时可能会增加几百个)。 对其进行大量疯狂的处理,这些处理基本上独立于数据库。此过程是并行的,因此(1)中大约8-10个序列被同时处理。每个并行过程会生成3个附加序列。 取所有3个序列和原始序列,并将它们合并为一批。 将现在完成的所有8-10个处理任务中的批次合并为一个大的超级批次。 使用BULK INSERT策略(请参阅下一步)或TVP策略(跳至步骤8)导入它。 使用SqlBulkCopy该类将整个超级批处理转储到4个永久登台表中。 运行一个存储过程,该存储过程是(a)在两个表上执行一系列聚合步骤,包括几个JOIN条件,然后(b)MERGE在6个生产表上使用聚合和非聚合数据执行a 。(完成) 要么 生成4个DataTable对象,其中包含要合并的数据;其中3个包含CLR类型,但不幸的是ADO.NET TVP没有正确地支持它们,因此必须将它们作为字符串表示形式使用,这会严重影响性能。 将TVP馈送到存储过程,该过程基本上与(7)相同,但直接与接收到的表一起进行。(完成) 结果相当接近,但是TVP方法最终平均表现更好,即使数据超过1000行少量。 请注意,此导入过程连续运行了数千次,因此仅通过计算完成所有合并所花费的小时数(是,小时),就很容易获得平均时间。 最初,平均合并几乎要花8秒钟才能完成(在正常负载下)。消除NetBIOS的麻烦并切换为SqlBulkCopy将时间减少到几乎恰好7秒。切换到TVP可以将时间进一步减少到每批5.2秒。对于运行时间以小时为单位的过程,这将使吞吐量提高35% -一点也不差。与相比,也提高了约25%SqlBulkCopy。 实际上,我相当有信心,真正的进步远不止于此。在测试过程中,很明显,最终的合并不再是关键的路径。相反,进行所有数据处理的Web服务开始受到输入请求数量的限制。CPU和数据库I / O都没有真正达到极限,并且没有明显的锁定活动。在某些情况下,我们发现连续合并之间存在几秒钟的空闲间隔。使用时有一点缝隙,但要小得多(半秒左右)SqlBulkCopy。但是我想那将成为另一天的故事。 结论:表值参数确实比BULK INSERT在中型数据集上执行复杂的导入+转换过程的操作要好。 …

8
如何测量AngularJS应用的摘要周期的性能?
测量angularjs摘要循环持续时间的简单方法是什么?有多种方法可以分析摘要循环的性能,但是每种方法都有其自己的pitfal: Chrome事件探查器:过多的细节,无法以一种易于发现的方式破坏摘要周期 Batarang(AngularJS浏览器插件):开销太大,刷新速度慢,在大型应用程序中爆炸。 ...一定有更好的方法吗!! 1?

8
关于性能和Java互操作性:Clojure与Scala
我已经读过Clojure vs. Scala的各种论述,而我意识到两者都有自己的位置。关于将Clojure与Scala进行比较时,有一些注意事项尚未得到完整的解释: 1.)两种语言中哪一种通常更快?我意识到这从一种语言功能到另一种语言功能都会有所不同,但是对性能进行总体评估会有所帮助。例如:我知道Python字典的速度非常快。但作为一个整体,它是一个多比Java慢语。我不想和Clojure一起去解决这个问题。 2.)与Java的互操作性如何?到目前为止,我所读到的只是Scala具有本机集合类型,使其与大型Java代码库集成有点笨拙,而Clojure遵循一种简单的以Iterable / Iterator为中心的方式与Java类进行互操作。还有其他想法/细节吗? 最终,如果Clojure和Scala之间的距离足够近,我可能会同时尝试它们。关于Clojure的一件事是该语言看起来非常简单。但是话又说回来,Scala具有非常灵活的类型系统。但是,我知道Scala速度很快(基于多个个人帐户)。因此,如果Clojure的速度明显慢一些:我想早点知道。

2
numpy如何比我的Fortran例程快得多?
我从仿真中得到了一个代表温度分布的512 ^ 3数组(用Fortran编写)。该阵列存储在大小约为1 / 2G的二进制文件中。我需要知道此数组的最小值,最大值和均值,并且由于不久以后无论如何我都需要了解Fortran代码,因此我决定尝试一下,并提出了以下非常简单的例程。 integer gridsize,unit,j real mini,maxi double precision mean gridsize=512 unit=40 open(unit=unit,file='T.out',status='old',access='stream',& form='unformatted',action='read') read(unit=unit) tmp mini=tmp maxi=tmp mean=tmp do j=2,gridsize**3 read(unit=unit) tmp if(tmp>maxi)then maxi=tmp elseif(tmp<mini)then mini=tmp end if mean=mean+tmp end do mean=mean/gridsize**3 close(unit=unit) 我使用的计算机上的每个文件大约需要25秒。那让我感到震惊,因为它相当长,所以我继续使用Python进行了以下操作: import numpy mmap=numpy.memmap('T.out',dtype='float32',mode='r',offset=4,\ shape=(512,512,512),order='F') mini=numpy.amin(mmap) maxi=numpy.amax(mmap) mean=numpy.mean(mmap) 现在,我希望这当然会更快,但是我真的很震惊。在相同条件下,它花费不到一秒钟的时间。平均值偏离了我的Fortran例程找到的平均值(我也使用128位浮点数运行,因此我以某种方式信任它),但仅在第7个有效位数左右。 numpy怎么这么快?我的意思是,您必须查看数组的每个条目才能找到这些值,对吗?我是否在Fortran例程中做了一些非常愚蠢的事情,以使其花费了更长的时间? 编辑: 要回答评论中的问题: 是的,我也使用32位和64位浮点数运行了Fortran例程,但它对性能没有影响。 我使用iso_fortran_env了提供128位浮点数的代码。 …

21
您最喜欢的分析工具是什么(针对C ++)?
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 到目前为止,我只使用过Rational Quantify。我听说过有关英特尔VTune的很棒的事情,但是从未尝试过! 编辑:我主要是在寻找可以检测代码的软件,因为我猜这是获得非常好的结果的唯一方法。 也可以看看: Windows上本机C ++有哪些好的分析器?

8
SQL“赞”与“ =”性能
这个问题 绕着我想知道的地方,但是答案并没有完全解决。 使用通配符时,通常看起来'='比'like'更快。这似乎是传统观念。但是,假设我有一列包含有限数量的不同固定,硬编码,varchar标识符,并且我想选择与其中之一匹配的所有行: select * from table where value like 'abc%' 和 select * from table where value = 'abcdefghijklmn' “赞”只需要测试前三个字符即可找到匹配项,而“ =”必须比较整个字符串。在这种情况下,在所有其他条件相同的情况下,“喜欢”似乎会占优势。 这是一个一般性的学术问题,因此与哪个数据库无关,但它是使用SQL Server 2005产生的。
82 sql  performance 

2
CSS3过渡:“过渡:全部”是否比“过渡:x”慢?
我对css3 transition属性的渲染速度有疑问。 假设我有许多要素: div, span, a {transition: all} div {margin: 2px} span {opacity: .5} a:hover {background-position: left top} div:hover {margin: -100px} span:hover {opacity: 1} a:hover {background-position: -5px top} 使用一个声明将所有这些元素的所有转换作为目标更有效div, span, a {transition: all}。但是我的问题是:以动画渲染的平滑度和快速度为目标,将每个元素的特定过渡属性作为目标是否会“更快”?例如: div {margin: 2px; transition: margin .2s ease-in} span {opacity: .5; transition: opacity .2s ease-in} a {background-position: left …

9
MySQL中的UUID性能?
我们正在考虑将UUID值用作MySQL数据库的主键。所插入的数据是由数十,数百甚至数千台远程计算机生成的,并且以每秒100-40,000次插入的速度插入,我们将永远不会进行任何更新。 在我们开始选择数据之前,数据库本身通常将获得约5000万条记录,因此不是庞大的数据库,也不是很小的数据库。我们也计划在InnoDB上运行,但是如果我们有更好的引擎来进行我们的工作,我们愿意改变它。 我们已经准备好使用Java的Type 4 UUID,但是在测试中已经看到了一些奇怪的行为。一方面,我们将其存储为varchar(36),但现在我意识到使用Binary(16)会更好-尽管我不确定有多少更好。 更大的问题是:当我们拥有5000万条记录时,此随机数据对索引的破坏有多严重?如果我们使用例如类型1的UUID标记最左边的比特,我们会更好吗?还是我们应该完全放弃UUID并考虑使用auto_increment主键? 我正在寻找有关不同类型的UUID在MySQL中作为索引/主键存储时的性能的一般想法/提示。谢谢!

30
开发人员应该首先以可读性或性能为目标吗?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 通常,开发人员会面临两种可能的解决方法的选择,一种是惯用且可读的,而另一种则不太直观,但性能可能更好。例如,在基于C的语言中,有两种方法将数字乘以2: int SimpleMultiplyBy2(int x) { return x * 2; } 和 int FastMultiplyBy2(int x) { return x << 1; } 对于技术和非技术读者来说,第一个版本都比较容易上手,但是第二个版本的性能可能更好,因为移位比乘法更简单。(目前,尽管这也是一个考虑因素,但假设编译器的优化器不会检测到该问题并对其进行优化)。 作为开发人员,最初尝试会更好吗?

1
Jaro-Winkler和Levenshtein距离之间的区别?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 改善这个问题 我有一个用例,需要对多个文件中的数百万条记录进行模糊匹配。我为此确定了两种算法:Jaro-Winkler和Levenshtein编辑距离。 当我开始探索两者时,我无法理解两者之间的确切区别。似乎Levenshtein给出了两个字符串之间的编辑次数,而Jaro-Winkler提供了0.0到1.0之间的归一化分数。我不了解该算法。 由于我需要使用任一种算法,因此我需要知道这两种算法之间的根本区别是什么。 其次,我想了解这两种算法之间的性能差异。

9
在两个屏幕之一上,DataGridView的可怕的重绘性能
我实际上已经解决了这个问题,但我将其发布以供后代参考。 我的双显示器系统上的DataGridView遇到了一个非常奇怪的问题。该问题表现为控件的极慢重绘(例如,完整重绘需要30秒),但仅当它在我的一个屏幕上时才显示。另一方面,重绘速度很好。 我有Nvidia 8800 GT,带有最新的非beta驱动程序(175。)。是驱动程序错误吗?我将把它悬而未决,因为我必须忍受这种特殊的配置。(不过,这在ATI卡上不会发生...) 绘制速度与单元格内容无关,并且自定义绘制根本无法提高性能-即使仅绘制实心矩形也是如此。 后来我发现,将ElementHost(来自System.Windows.Forms.Integration命名空间)放在窗体上可以解决此问题。它不一定要弄乱;它只是需要DataGridView形式的子对象。只要Visible属性为true ,就可以将其调整为(0,0)。 我不想将.NET 3 / 3.5依赖项显式添加到我的应用程序中。我创建了一种在运行时使用反射创建此控件的方法。它可以正常工作,并且至少在没有所需库的计算机上正常运行-只是恢复缓慢。 此方法还使我可以在应用程序运行时申请修复,从而可以更轻松地查看表单上WPF库的更改(使用Spy ++)。 经过大量的试验和错误之后,我注意到在控件本身(而不是仅表单)上启用双重缓冲可以解决此问题! 因此,您只需要基于DataGridView创建自定义类,即可启用其DoubleBuffering。而已! class CustomDataGridView: DataGridView { public CustomDataGridView() { DoubleBuffered = true; } } 只要我所有的网格实例都使用此自定义版本,一切都很好。如果遇到这种情况导致我无法使用子类解决方案(如果我没有代码),我想我可以尝试将该控件注入表格中:)(尽管我更有可能尝试使用反射从外部强制启用DoubleBuffered属性,以再次避免该依赖关系。 可惜如此琐碎的事情占用了我很多时间...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.