premature-optimization相关内容
在 ColdFusion 中哪一个更有效? isDefined('url.myvar') 或 structKeyExists(url, 'myvar') 解决方案 这些天(CF8+)速度上的差异不是那么很大.不过,structKeyExists 确实快了一点.原因如下. 当您使用 isDefined 时,您传入的字符串会在多个范围内作为键名进行搜索.从 CF9 开始,范围列表按检查
..
我正在查看文档,该文档描述了提高 Lua 性能的各种技术 脚本代码,我很震惊需要这样的技巧.(虽然我引用了 Lua,但我在 Javascript 中看到过类似的 hack). 为什么需要这种优化: 例如代码 for i = 1, 1000000 做本地 x = math.sin(i)结尾 运行速度比这个慢 30%: local sin = math.sin对于 i = 1, 10
..
我有这样的事情: Map我的地图 = ...;for(字符串键:myMap.keySet()){System.out.println(key);System.out.println(myMap.get(key));} 那么 myMap.keySet() 在 foreach 循环 中被调用一次了吗?我认为是的,但希望得到您的意见. 我想知道以这种方式使用 foreach (myMap.ke
..
正如 Knuth 所说, 我们应该忘记小效率,比如大约 97% 的时间:过早的优化是万恶之源. 这是 Stack Overflow 对诸如“哪种循环机制最有效"、“SQL 优化技术?"等问题的回答中经常出现的内容.(等等).这些优化技巧问题的标准答案是分析您的代码并首先查看它是否有问题,如果不是,则不需要您的新技术. 我的问题是,如果特定技术不同但不是特别模糊或混淆,那真的可以被
..
由于分支预测的奇妙之处,二进制搜索可能比对整数数组的线性搜索慢.在典型的台式机处理器上,在使用二分搜索更好之前,该数组必须有多大?假设该结构将用于多次查找. 解决方案 我尝试了一点 C++ 基准测试,我很惊讶 - 线性搜索似乎占了上风,最多有几十个项目,我还没有找到案例对于这些尺寸,二进制搜索更好.也许 gcc 的 STL 没有很好地调整?但是——你会用什么来实现这两种搜索?-)这是我的代
..
java 中有两种类型的 if 语句 - 经典:if {} else {} 和简写:exp ?值1:值2.一个比另一个快还是相同? 声明: int x;如果(表达式){x = 1;} 别的 {x = 2;} 三元运算符: int x = (表达式) ?1:2; 解决方案 那里只有一种类型的“if"语句.另一种是条件表达式.至于哪个性能更好:它们可以编译为相同的字节码,我希望它们的行
..
在java中,我通常做一个如下的for循环: for (int i = 0; i 但最近一位同事这样输入: for (int i = 0; i
..
在我们的应用程序中将 for 循环更新为 for-each 循环时,我遇到了很多这样的“模式": for (int i = 0, n = a.length; i
..
在我们的应用程序中将 for 循环更新为 for-each 循环时,我遇到了很多这样的“模式": for (int i = 0, n = a.length; i
..
任务是将 C 整数数组的每个元素设置为其绝对值.我正在努力尽可能有效地做到这一点.以下是我所做的一系列优化.请告诉我这些是否真的是优化,是否可以做更多的优化! 函数的第一个参数是一个整数数组,第二个参数是该数组的整数大小. 以下是标准实现: void absolute (int array[], int n){for(int i = 0; i 这足以满足任何介绍性编程课程教授的需
..
整数乘积(暂时忘记除法)之间的差值是否仍然有利于移位,如果是这样,该差值有多大? 这似乎只是一个低级的优化,即使您想要它,(C#/Java)在大多数情况下也不应该将字节码编译器或jit捕获吗? 注意:我测试了C#(使用gmcs Mono C#编译器版本2.6.7.0)的编译输出,并且即使乘以2的倍数,乘法示例也不使用shift进行乘法. C# http://csharp.past
..
我有一个页面,其中有4个标签,这些标签根据不同的表格显示4个不同的报告. 我使用
查询中的 select count(*)获得每个表的行数,并在选项卡上显示每个表中可用的行数.结果,每个页面回发都会导致执行5个 count(*)查询(其中4个用于获取计数,而1个用于分页)和1个用于获取报告内容的查询. 现在我的问题是: count(*)查询是否真的很昂贵-我应该将行计数
..
我了解到Xor操作可用于实现有效的交换功能。像这样: template void swap(T& a,T& b) { a = a ^ b; b = a ^ b; a = a ^ b; } 但是我在互联网上可以找到的所有swap的实现基本上都是这样的: template 无效掉期(T& a,T& b)
..
由于分支预测的奇妙,二进制搜索可能比通过整数数组进行线性搜索要慢。在典型的台式机处理器上,使用二进制搜索将需要多大的阵列?假定该结构将用于许多查找。 解决方案 我尝试了一些C ++基准测试,但很惊讶-线性搜索似乎占据了几十个项目,而且我还没有发现二进制搜索更适合那些大小的情况。也许海湾合作委员会的STL调整不当?但是,然后-您将用什么来实现这两种搜索?-)这是我的代码,因此每个人都可以看到
..
正如努斯所说, 我们应该忘记效率低下的问题,例如大约97%的时间:过早的优化是万恶之源. 这是Stack Overflow经常回答的问题,例如“哪种是最有效的循环机制","SQL优化技术"? (等).这些优化技巧的标准答案是分析您的代码,首先查看是否有问题,如果不是,那么就不需要您的新技术了. 我的问题是,如果特定技术不同但不是特别晦涩或模糊,那真的可以认为是过早的优化吗?
..
我想“剪切"一个numpy数组.我不确定我是否正确使用了“剪切"一词;通过剪切,我的意思是: 将第一列移动0位 将第二列移动1个地方 将第三列移动2个地方 等等... 所以这个数组: array([[11, 12, 13], [17, 18, 19], [35, 36, 37]]) 将变成这个数组: array([[11, 36, 19
..
我正在查看文档,该文档描述了各种可提高Lua性能的技术脚本代码,令我震惊的是将需要此类技巧. (尽管我引用了Lua,但我在Javascript中也见过类似的黑客攻击.) 为什么需要这种优化: 例如,代码 for i = 1, 1000000 do local x = math.sin(i) end 运行速度比此速度慢30%: local sin = math.
..
在java中,我通常会生成如下的for循环: for(int i = 0; i
..
这种或那种方式有任何性能上的好处吗?它是编译器/ VM特定的吗?我正在使用Hotspot。 解决方案 首先:你不应该在做的基础上做出静态与非静态的选择性能。 第二:在实践中,它不会有任何区别。热点可以选择优化方式,使一个方法的静态调用更快,另一个方法的非静态调用更快。 第三:围绕静态与非静态的大多数神话static基于非常旧的JVM(在Hotspot所做的优化附近没有做任何事情
..
有两种类型的如果中的java语句 - 经典: if {} else {} 和简写: exp? value1:value2 。是一个比另一个更快还是相同? 声明: int x; if(表达式){ x = 1; }其他{ x = 2; } 三元运营商: int x =(表达式)? 1:2; 解决方案 那里只有一种“if”语句。另一个
..