Questions tagged «optimization»

优化是改进方法或设计的行为。在编程中,优化通常采取提高算法速度或减少所需资源的形式。优化的另一个含义是机器学习中使用的数值优化算法。

6
优化基于Kohana的网站以提高速度和可扩展性
我与Kohana一起建立的网站昨天遭到了巨大的点击量,这使我退后一步并评估了一些设计。我很好奇什么是优化基于Kohana的应用程序的一些标准技术? 我也对基准测试感兴趣。是否需要设置Benchmark::start()和设置Benchmark::stop()每个控制器方法才能查看所有页面的执行时间,还是能够在全球范围内快速应用基准测试? 我将在更多时间使用Cache库,但是我愿意接受更多建议,因为我敢肯定,目前我还不知道有很多事情可以做。

3
为什么代码会积极尝试阻止尾调用优化?
问题的标题可能有点奇怪,但据我所知,根本没有什么可以反对尾部调用优化。但是,在浏览开源项目时,我已经遇到了一些主动尝试阻止编译器进行尾部调用优化的功能,例如CFRunLoopRef的实现,其中充斥着此类黑客。例如: static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__() __attribute__((noinline)); static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__(CFRunLoopObserverCallBack func, CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info) { if (func) { func(observer, activity, info); } getpid(); // thwart tail-call optimization } 我很想知道为什么这看起来如此重要,并且在任何情况下我作为普通开发人员都应该牢记这一点吗?例如。尾部调用优化存在常见的陷阱吗?

2
在ArrayBlockingQueue中,为什么将最终成员字段复制到本地最终变量中?
在中ArrayBlockingQueue,所有需要锁定的方法都将final在调用之前将其复制到局部变量lock()。 public boolean offer(E e) { if (e == null) throw new NullPointerException(); final ReentrantLock lock = this.lock; lock.lock(); try { if (count == items.length) return false; else { insert(e); return true; } } finally { lock.unlock(); } } 没有任何理由复制this.lock到一个局部变量lock时,现场this.lock的final? 此外,E[]在执行操作之前,它还会使用的本地副本: private E extract() { final E[] items = this.items; …


2
试图了解gcc选项-fomit-frame-pointer
我要求Google给我gccoption的含义,该选项-fomit-frame-pointer将我重定向到以下语句。 -fomit-frame-pointer 不要将帧指针保存在不需要一个的寄存器中。这避免了保存,设置和恢复帧指针的指令。它还使许多功能中都有一个额外的寄存器。这也使得在某些机器上无法进行调试。 据我对每个功能的了解,将在过程存储器的堆栈中创建一个激活记录,以保留所有局部变量和更多信息。我希望该帧指针表示功能激活记录的地址。 在这种情况下,什么类型的函数不需要将帧指针保留在寄存器中?如果获得此信息,我将尝试基于此设计新功能(如果可能),因为如果帧指针未保存在寄存器中,则某些指令将以二进制形式省略。在具有许多功能的应用程序中,这确实可以显着提高性能。


11
优化C#/。NET程序的技巧[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 如今,优化似乎是一门失传的艺术。难道没有时间所有程序员都从他们的代码中压缩每一盎司的效率吗?在雪地里走五英里时经常这样做吗? 本着使人流连忘返的精神,您了解一些简单(或复杂)更改以优化C#/。NET代码的技巧吗?由于涉及的范围如此广泛,这取决于要完成的任务,因此有助于提供提示的上下文。例如: 当将许多字符串连接在一起时,请StringBuilder改用。请参阅底部的链接以获取有关此方面的警告。 使用string.Compare两个字符串比较,而不是做这样的事情string1.ToLower() == string2.ToLower() 到目前为止,似乎普遍存在的共识是关键。这种错误的意思是:测量并不能告诉您问题出在哪里,如果遇到瓶颈,该怎么办。我曾经遇到过字符串连接瓶颈,却不知道该怎么做,因此这些技巧很有用。 我发布此文章的目的是为常见的瓶颈留出一席之地,以及在遇到瓶颈之前如何避免它们。甚至没有人必须盲目遵循的即插即用代码,而是更多地了解应该至少在某种程度上考虑性能,并且要注意一些常见的陷阱。 我可以看到,虽然也可能知道技巧为什么有用以及应该在哪里应用,这可能会很有用。作为StringBuilder提示,我在Jon Skeet的站点上找到了我很早以前所做的帮助。
78 c#  .net  optimization 

5
为什么有条件移动不容易受到分支预测失败的影响?
在阅读了这篇文章(关于StackOverflow的答案)(在优化部分)之后,我想知道为什么条件移动不容易受到分支预测失败的影响。我在一篇关于cond move的文章中找到了该文章(AMD撰写的PDF)。同样,他们声称cond的性能优势。动作。但是为什么呢?我没看到 在评估该ASM指令时,尚不清楚先前的CMP指令的结果。


2
加快Julia编写不佳的R示例的速度
朱莉娅比较R和性能的例子似乎特别令人费解。 https://github.com/JuliaLang/julia/blob/master/test/perf/perf.R 您可以从以下两种算法中获得最快的性能(最好是解释一下您所做的更改以使其更像R)? ## mandel mandel = function(z) { c = z maxiter = 80 for (n in 1:maxiter) { if (Mod(z) > 2) return(n-1) z = z^2+c } return(maxiter) } mandelperf = function() { re = seq(-2,0.5,.1) im = seq(-1,1,.1) M = matrix(0.0,nrow=length(re),ncol=length(im)) count = 1 for (r in …
77 r  optimization  julia 

4
冒泡排序中的> vs.> =会导致明显的性能差异
我偶然发现了一些东西。起初,我认为可能是这种情况下分支错误预测的情况,但是我无法解释为什么分支错误预测会导致这种行为。 我用Java实现了两个版本的Bubble Sort,并进行了一些性能测试: import java.util.Random; public class BubbleSortAnnomaly { public static void main(String... args) { final int ARRAY_SIZE = Integer.parseInt(args[0]); final int LIMIT = Integer.parseInt(args[1]); final int RUNS = Integer.parseInt(args[2]); int[] a = new int[ARRAY_SIZE]; int[] b = new int[ARRAY_SIZE]; Random r = new Random(); for (int run = 0; …

14
在哪里可以找到Java中基于Trie的标准地图实现?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 2天前关闭。 改善这个问题 我有一个Java程序,它存储了很多从字符串到各种对象的映射。 现在,我的选择是依靠散列(通过HashMap)或二进制搜索(通过TreeMap)。我想知道在流行且优质的收藏库中是否有一种有效且基于标准的基于trie的地图实现? 我过去写过自己的书,但是我愿意使用一些标准的东西(如果有的话)。 快速澄清:虽然我的问题很笼统,但在当前项目中,我正在处理大量数据,这些数据已通过完全合格的类名或方法签名进行了索引。因此,存在许多共享前缀。

2
PostgreSQL临时表
我需要执行250万次查询。该查询生成我需要的一些行,AVG(column)然后使用它AVG从低于平均值的所有值中过滤表。然后,我需要将INSERT这些过滤后的结果放入表格中。 做到这一点的唯一有效方法似乎是通过TEMPORARY TABLE为每个query-postmaster python-thread创建一个。我只是希望这些TEMPORARY TABLEs不会持久保存在硬盘驱动器上,并且会保留在内存(RAM)中,除非它们的内存不足。 我想知道是否TEMPORARY TABLE会引起磁盘写操作(这会干扰INSERTS,即使整个过程变慢)

8
将Set <String>的内容放到单个字符串中且单词之间用空格隔开的最快方法?
我有几个Set&lt;String&gt;s,并且想要将它们中的每一个转换成单个String,其中原始元素的每个元素Set都由空格“”分隔。天真的第一方法就是这样做 Set&lt;String&gt; set_1; Set&lt;String&gt; set_2; StringBuilder builder = new StringBuilder(); for (String str : set_1) { builder.append(str).append(" "); } this.string_1 = builder.toString(); builder = new StringBuilder(); for (String str : set_2) { builder.append(str).append(" "); } this.string_2 = builder.toString(); 谁能想到更快,更漂亮或更有效的方式来做到这一点?


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.