Questions tagged «performance»

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

11
不抛出异常时,try / catch块是否会损害性能?
在与Microsoft员工进行代码审查期间,我们在一个try{}块内遇到了很大一部分代码。她和一位IT代表建议,这可能会影响代码的性能。实际上,他们建议大多数代码应位于try / catch块之外,并且仅应检查重要部分。微软员工补充说,即将发布的白皮书警告不要尝试错误的try / catch块。 我环顾四周,发现它会影响优化,但似乎仅在范围之间共享变量时才适用。 我不是在问代码的可维护性,甚至不是在处理正确的异常(毫无疑问,有问题的代码都需要重构)。我也不是指使用异常进行流控制,这在大多数情况下显然是错误的。这些是重要的问题(有些更重要),但这里不是重点。 不抛出异常时,try / catch块如何影响性能?

8
LINQ:不是任何人都不是所有人
我经常想检查一个提供的值是否与列表中的一个匹配(例如,在验证时): if (!acceptedValues.Any(v => v == someValue)) { // exception logic } 最近,我注意到ReSharper要求我将这些查询简化为: if (acceptedValues.All(v => v != someValue)) { // exception logic } 显然,这在逻辑上是相同的,也许可读性更高(如果您完成了许多数学运算),我的问题是:这会导致性能下降吗? 感觉像是应该的(即.Any()听起来像是短路,而.All()听起来像不是),但是我没有任何证据可以证明这一点。是否有人对查询是否可以解决相同的问题或ReSharper是否使我误入歧途有更深入的了解?
272 c#  .net  performance  linq  resharper 

11
是什么阻碍了Ruby,Python获得Javascript V8速度?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 5年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 V8引擎是否有任何阻止优化实现(例如内联缓存)的Ruby / Python功能? Python由Google家伙共同开发,因此不应被软件专利所阻止。 还是这与Google投入V8项目的资源有关。

9
SQL Server中INNER JOIN与LEFT JOIN的性能
我创建了在9个表上使用INNER JOIN的SQL命令,无论如何,此命令将花费很长时间(超过五分钟)。所以我的同事建议我将INNER JOIN更改为LEFT JOIN,因为尽管我知道,但LEFT JOIN的性能更好。更改后,查询速度得到了显着提高。 我想知道为什么LEFT JOIN比INNER JOIN快? 我的SQL命令看起来象下面这样: SELECT * FROM A INNER JOIN B ON ... INNER JOIN C ON ... INNER JOIN D等 更新: 这是我的架构的简要介绍。 FROM sidisaleshdrmly a -- NOT HAVE PK AND FK INNER JOIN sidisalesdetmly b -- THIS TABLE ALSO HAVE NO PK AND FK …

19
内在联系与何处
两者之间的性能(在oracle中)是否有区别 Select * from Table1 T1 Inner Join Table2 T2 On T1.ID = T2.ID 和 Select * from Table1 T1, Table2 T2 Where T1.ID = T2.ID ?
257 sql  performance  oracle 

12
SQL Server:快速查询,但过程缓慢
查询运行速度很快: DECLARE @SessionGUID uniqueidentifier SET @SessionGUID = 'BCBA333C-B6A1-4155-9833-C495F22EA908' SELECT * FROM Report_Opener WHERE SessionGUID = @SessionGUID ORDER BY CurrencyTypeOrder, Rank 子树成本:0.502 但是将相同的SQL放入存储过程运行速度很慢,并且执行计划完全不同 CREATE PROCEDURE dbo.ViewOpener @SessionGUID uniqueidentifier AS SELECT * FROM Report_Opener WHERE SessionGUID = @SessionGUID ORDER BY CurrencyTypeOrder, Rank EXECUTE ViewOpener @SessionGUID 子树成本:19.2 我跑了 sp_recompile ViewOpener 而且它仍然运行相同(严重),并且我还将存储过程更改为 CREATE PROCEDURE …

6
抛出异常的哪一部分是昂贵的?
在Java中,当实际上没有错误时使用throw / catch作为逻辑的一部分通常是一个坏主意(部分),因为抛出和捕获异常的代价很高,而且在循环中多次执行通常比其他方法慢得多不涉及引发异常的控制结构。 我的问题是,是在throw / catch本身中还是在创建Exception对象时(因为它获得了大量的运行时信息,包括执行堆栈)而产生的成本? 换句话说,如果我这样做 Exception e = new Exception(); 但是不要扔,是扔的大部分费用,还是扔+渔获物处理的成本很高? 我不是在问是否将代码放在try / catch块中会增加执行该代码的成本,我是在问捕获Exception是昂贵的部分,还是创建(调用构造函数)Exception是昂贵的部分。 提出此问题的另一种方法是,如果我创建了一个Exception实例并一遍又一遍地抛出并捕获,那么这将比每次抛出新的Exception都快得多吗?

9
为什么JSF多次调用getter
假设我指定了一个outputText组件,如下所示: <h:outputText value="#{ManagedBean.someProperty}"/> 如果在someProperty调用getter for时打印一条日志消息并加载页面,则很容易注意到每个请求多次调用getter(在我的情况中是两次或三次): DEBUG 2010-01-18 23:31:40,104 (ManagedBean.java:13) - Getting some property DEBUG 2010-01-18 23:31:40,104 (ManagedBean.java:13) - Getting some property 如果someProperty计算的值昂贵,则可能存在问题。 我在Google上搜索了一下,发现这是一个已知问题。一种解决方法是包括检查并查看是否已经计算出: private String someProperty; public String getSomeProperty() { if (this.someProperty == null) { this.someProperty = this.calculatePropertyValue(); } return this.someProperty; } 这样做的主要问题是,您获得了大量样板代码,更不用说您可能不需要的私有变量了。 有什么替代方法?没有太多不必要的代码,有没有办法实现这一目标?有没有办法阻止JSF以这种方式运行? 感谢您的输入!
256 performance  jsf  el  getter 


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

4
是什么使SQL语句可存储?
根据定义(至少从我所看到的意义上),可精简意味着查询能够使查询引擎优化查询所使用的执行计划。我尝试查找答案,但是在主题上似乎没有很多。所以问题是,什么使SQL查询可持久化?任何文件将不胜感激。 供参考:SARGable

10
有什么更有效的方法:Dictionary TryGetValue或ContainsKey + Item?
从MSDN在Dictionary.TryGetValue方法上的条目: 此方法结合了ContainsKey方法和Item属性的功能。 如果未找到键,则value参数将为值类型TValue获取适当的默认值;否则,值为0。例如,对于整数类型,0(零),对于布尔类型,false(假),对于引用类型,null。 如果您的代码经常尝试访问不在字典中的键,请使用TryGetValue方法。使用此方法比捕获Item属性引发的KeyNotFoundException更有效。 此方法接近O(1)操作。 从描述中,尚不清楚它是否比调用ContainsKey然后进行查找更有效或更方便。TryGetValue只是先执行ContainsKey然后再实现Item 的实现,还是实际上比通过一次查找更有效? 换句话说,什么是更有效的(即哪个执行的查询更少): Dictionary<int,int> dict; //...// int ival; if(dict.ContainsKey(ikey)) { ival = dict[ikey]; } else { ival = default(int); } 要么 Dictionary<int,int> dict; //...// int ival; dict.TryGetValue(ikey, out ival); 注意:我不是在寻找基准!

18
使Android模拟器运行更快
Android模拟器有点呆板。对于某些设备,例如Motorola Droid和Nexus One,该应用程序在实际设备中的运行速度比仿真器要快。在测试游戏和视觉效果时,这是一个问题。 如何使模拟器尽可能快地运行?我一直在玩弄它的参数,但是还没有找到显示出明显改进的配置。

13
测试两个整数范围是否重叠的最有效方法是什么?
给定两个包含整数的范围[x1:x2]和[y1:y2],其中x1≤x2且y1≤y2,测试这两个范围是否存在重叠的最有效方法是什么? 一个简单的实现如下: bool testOverlap(int x1, int x2, int y1, int y2) { return (x1 >= y1 && x1 <= y2) || (x2 >= y1 && x2 <= y2) || (y1 >= x1 && y1 <= x2) || (y2 >= x1 && y2 <= x2); } 但我希望有更有效的方法来进行计算。 就最少的操作而言,哪种方法是最有效的。

23
在JavaScript中遍历数组的最快方法是什么?
我从书中得知,您应该为循环编写这样的代码: for(var i=0, len=arr.length; i < len; i++){ // blah blah } 因此arr.length不会每次都计算。 其他人则说编译器会对此做一些优化,因此您可以编写: for(var i=0; i < arr.length; i++){ // blah blah } 我只想知道哪种是最佳实践?

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.