Questions tagged «performance»

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

24
在Java中使用instanceof的性能影响
我正在开发一个应用程序,一种设计方法涉及大量使用instanceof操作员。虽然我知道OO设计通常会尝试避免使用instanceof,但这是另一回事了,这个问题与性能完全相关。我想知道是否会对性能产生影响?是一样快==吗? 例如,我有一个包含10个子类的基类。在采用基类的单个函数中,我检查该类是否为子类的实例并执行一些例程。 我想解决的另一种方法是改用“类型id”整数基元,并使用位掩码表示子类的类别,然后将子类“类型id”与位掩码进行位掩码比较。代表类别的常量掩码。 instanceofJVM 是否以某种方式对其进行了优化,使其速度更快?我想坚持使用Java,但应用程序的性能至关重要。如果以前曾走过这条路的人可以提供一些建议,那将很酷。我是否挑剔或专注于错误的东西进行优化?

25
在循环之前或循环中声明变量之间的区别?
我一直想知道,一般而言,在循环之前声明一个抛弃型变量(而不是在循环内部重复)是否会产生(性能)差异?Java中的一个(毫无意义的)示例: a)循环前声明: double intermediateResult; for(int i=0; i < 1000; i++){ intermediateResult = i; System.out.println(intermediateResult); } b)循环内的声明(反复): for(int i=0; i < 1000; i++){ double intermediateResult = i; System.out.println(intermediateResult); } a或b哪个更好? 我怀疑重复变量声明(示例b)在理论上会增加开销,但编译器足够聪明,因此无关紧要。示例b的优点是更紧凑,并将变量的范围限制在使用它的位置。尽管如此,我还是倾向于根据示例a进行编码。 编辑:我对Java案例特别感兴趣。

12
多少线程太多?
我正在编写服务器,并且在收到请求时将每个动作发送到一个单独的线程中。我这样做是因为几乎每个请求都会进行数据库查询。我正在使用线程池库来减少线程的构造/销毁。 我的问题是:这样的I / O线程的最佳切入点是什么?我知道这只是一个粗略的估计,但是我们正在讨论数百个吗?几千 我将如何确定这个临界值? 编辑: 谢谢大家的答复,看来我只是必须对其进行测试才能确定我的线程数上限。但问题是:我怎么知道我已经达到那个上限了?我到底应该测量什么?

15
一个很小的图标需要另一个HTTP请求是不是很愚蠢?如何将收藏夹图标放入子画面?
该赏金过期7天。这个问题的答案有资格获得+100声望奖励。 鲁宁(Rounin)正在寻找信誉良好的答案。 每个人都知道如何在HTML中设置favicon.ico链接: <link rel="shortcut icon" href="http://hi.org/icon.ico" type="image/x-icon"> 但是我认为,对于一个只有几个字节的小图标,您需要另一个HTTP请求是很愚蠢的。所以我想知道,如何才能使该图像成为精灵的一部分(例如background-position=0px -200px;),以加快并保存该有价值的HTTP请求。如何将其与徽标和其他艺术品一起保存到现有的精灵图像中? 指向favicon.ico瀑布图上项目编号31 的机器人是我的宠物ZAM。他通常会更快乐,他有一个很好的观点,让我知道是时候在网络上进行一些创意升级了,尽管他和我不同意他的服装,但我认为今天这有点愚蠢...

17
跟踪PHP中的脚本执行时间
PHP必须跟踪特定脚本使用的CPU时间,以强制执行max_execution_time限制。 有没有办法在脚本中访问此内容?我想在测试中包括一些日志记录,以了解实际PHP中的CPU消耗了多少(脚本坐着并等待数据库时,时间没有增加)。 我正在使用Linux机器。
289 php  performance 


12
递归比循环快吗?
我知道递归有时比循环要干净得多,并且我什么时候不应该在迭代中使用递归就没有任何疑问,我知道已经有很多问题了。 我要问的是,递归是否比循环快?在我看来,与循环函数相比,您总是能够完善一个循环并使其执行得更快,因为没有循环不断地建立新的堆栈框架。 我专门在寻找在应用程序中正确使用递归的应用程序中递归是否更快,例如某些排序函数,二进制树等。

2
为什么有些float <整数比较的速度慢四倍?
将浮点数与整数进行比较时,某些值对的评估时间要比其他类似幅度的值花费更长的时间。 例如: &gt;&gt;&gt; import timeit &gt;&gt;&gt; timeit.timeit("562949953420000.7 &lt; 562949953421000") # run 1 million times 0.5387085462592742 但是,如果将float或整数变小或变大一定数量,则比较会更快地运行: &gt;&gt;&gt; timeit.timeit("562949953420000.7 &lt; 562949953422000") # integer increased by 1000 0.1481498428446173 &gt;&gt;&gt; timeit.timeit("562949953423001.8 &lt; 562949953421000") # float increased by 3001.1 0.1459577925548956 更改比较运算符(例如使用==或&gt;代替)不会以任何明显的方式影响时间。 这不只是涉及到大小,因为采摘较大或较小的值会导致比较快,所以我怀疑它已经降到了一些不幸的方式位排队。 显然,对于大多数用例而言,比较这些值已足够快。我只是对为什么Python似乎在某些价值观上比在其他价值观上挣扎更多感到好奇。

8
调试和发行版之间的性能差异
我必须承认,通常我不会在程序中的Debug和Release配置之间进行切换,并且即使在程序实际部署在客户位置的情况下,我通常也选择使用Debug配置。 据我所知,如果不手动更改,则这些配置之间的唯一区别是Debug具有DEBUG定义的常量,而Release具有已检查的Optimize代码。 所以我的问题实际上是双重的: 这两种配置之间在性能上有很多区别吗?是否有任何特定类型的代码会在这里造成性能上的巨大差异,或者实际上不是那么重要吗? 是否有任何类型的代码都可以在Debug配置下正常运行,而在Release配置下可能会失败,或者您可以确定经过测试并且可以在Debug配置下正常运行的代码也可以在Release配置下正常运行。


2
使用--depth 1,创建提交并再次拉取更新进行浅克隆是否安全?
中的--depth 1选项git clone: 创建一个浅表副本,其历史记录被截断为指定的修订版本。浅层存储库有很多限制(您不能从中克隆或获取,也不能从中推入或推入其中),但是如果您仅对具有悠久历史的大型项目的最新历史感兴趣,并且想要将修补程序作为补丁发送。 但是我已经成功完成了一个浅表克隆,进行了一些更改并将这些更改推回到(裸克隆)源。 这对我来说很有意义-我的意思是为什么不呢?当克隆的HEAD在源中可识别,并且我的提交基于此时,似乎没有任何理由。但手册另有说明。 我喜欢浅克隆的想法-例如drupal核心:当我从7开始时,我没有必要知道drupal 4中发生了什么-但我不想朝自己的脚开枪。 因此,浅表克隆,在其中进行开发,再次从源头进行更新以保持更新安全吗?

17
使SQL Server数据库脱机时的极端等待时间
我正在尝试对我的开发数据库执行一些脱机维护(从实时备份还原开发数据库),但是通过SQL Server Management Studio进行的“脱机”命令执行速度非常慢-大约需要30分钟。我只是想尽办法,似乎无法在线找到有关可能导致速度问题或如何解决速度问题的任何参考。 一些站点建议打开与数据库的连接会导致此速度下降,但是使用此数据库的唯一应用程序是我的开发机的IIS实例,并且该服务已停止-没有更多打开的连接。 是什么导致这种速度下降,我该如何加快速度呢?

4
为什么在添加了大小写的情况下,Java开启连续int似乎运行得更快?
我正在研究一些Java代码,这些代码需要高度优化,因为它将在热门函数中运行,这些热点函数在我的主程序逻辑中的许多地方被调用。该代码的一部分涉及将double变量乘以10任意非负数int exponents。获得乘数的一种快速方法(编辑:但不是最快的方法,请参见下面的Update 2)是在switch上exponent: double multiplyByPowerOfTen(final double d, final int exponent) { switch (exponent) { case 0: return d; case 1: return d*10; case 2: return d*100; // ... same pattern case 9: return d*1000000000; case 10: return d*10000000000L; // ... same pattern with long literals case 18: return d*1000000000000000000L; default: …

10
我刚刚发现了为什么所有ASP.Net网站都运行缓慢的原因,并且我正在尝试解决该问题。
我刚刚发现,ASP.Net Web应用程序中的每个请求都在请求开始时获得会话锁,然后在请求结束时释放它! 如果像我刚开始那样对您失去影响,那么这基本上意味着以下几点: 每当ASP.Net网页加载时间很长时(可能是由于数据库调用速度慢或其他原因),并且用户由于厌倦了等待而决定要导航至其他页面时,它们不能!ASP.Net会话锁定会强制新页面请求等待,直到原始请求完成其痛苦的缓慢加载为止。啊 每当UpdatePanel加载缓慢时,用户决定在UpdatePanel完成更新之前导航到其他页面...它们不能!ASP.net会话锁定会强制新页面请求等待,直到原始请求完成其痛苦的缓慢加载为止。双重Arrrgh! 那有什么选择呢?到目前为止,我想出了: 实现ASP.Net支持的自定义SessionStateDataStore。我还没有找到太多可以复制的东西,而且似乎风险很高,很容易弄乱。 跟踪所有正在进行的请求,如果一个请求来自同一用户,则取消原始请求。似乎有些极端,但它可以工作(我认为)。 不要使用会话!当我需要某种状态给用户时,我可以只使用Cache以及经过身份验证的用户名上的关键项或类似的东西。再次看起来有点极端。 我真的无法相信ASP.Net Microsoft团队会在4.0版的框架中留下如此巨大的性能瓶颈!我是否缺少明显的东西?在会话中使用ThreadSafe集合有多困难?

2
为什么('x',)中的'x'比'x'=='x'快?
&gt;&gt;&gt; timeit.timeit("'x' in ('x',)") 0.04869917374131205 &gt;&gt;&gt; timeit.timeit("'x' == 'x'") 0.06144205736110564 也适用于具有多个元素的元组,两个版本似乎线性增长: &gt;&gt;&gt; timeit.timeit("'x' in ('x', 'y')") 0.04866674801541748 &gt;&gt;&gt; timeit.timeit("'x' == 'x' or 'x' == 'y'") 0.06565782838087131 &gt;&gt;&gt; timeit.timeit("'x' in ('y', 'x')") 0.08975995576448526 &gt;&gt;&gt; timeit.timeit("'x' == 'y' or 'x' == 'y'") 0.12992391047427532 基于此,我认为我应该完全开始in在任何地方而不是在所有地方使用==!

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.