我在R中有一个很大的性能问题。我写了一个迭代data.frame对象的函数。 它只是添加一个新的列data.frame和积累的东西。 (操作简单)。 data.frame大约有850K行。 我的电脑还在工作(现在大约10小时),我不知道运行时间。 dayloop2 <- function(temp){ for (i in 1:nrow(temp)){ temp[i,10] <- i if (i > 1) { if ((temp[i,6] == temp[i-1,6]) & (temp[i,3] == temp[i-1,3])) { temp[i,10] <- temp[i,9] + temp[i-1,10] } else { temp[i,10] <- temp[i,9] } } else { temp[i,10] <- temp[i,9] } } names(temp)[names(temp) == "V10"] <- "Kumm." return(temp) […]
我想优化我的查询,所以我看着mysql-slow.log 。 我的大部分慢查询都包含ORDER BY RAND() 。 我无法find解决此问题的真正解决scheme。 Theres是MySQLPerformanceBlog中的一个可能的解决scheme,但我不认为这是足够的。 在优化不佳(或频繁更新,用户pipe理)的表,它不工作,或者我需要运行两个或更多的查询,然后才能select我的PHP生成的随机行。 有没有解决这个问题? 一个虚拟的例子: SELECT accomodation.ac_id, accomodation.ac_status, accomodation.ac_name, accomodation.ac_status, accomodation.ac_images FROM accomodation, accomodation_category WHERE accomodation.ac_status != 'draft' AND accomodation.ac_category = accomodation_category.acat_id AND accomodation_category.acat_slug != 'vendeglatohely' AND ac_images != 'b:0;' ORDER BY RAND() LIMIT 1
我必须承认,通常我不会在我的程序中debugging和发布configuration之间切换,而且我通常select去debuggingconfiguration,即使这些程序实际部署在客户的地方。 据我所知,这些configuration之间的唯一区别是,如果您不手动更改它,则Debug将定义DEBUG常量,并且Release将检查Optimize代码 。 所以我的问题实际上是双重的: 这两种configuration有很大的性能差异。 有什么特定types的代码会在这里造成很大的性能差异,还是实际上并不那么重要? 是否有任何types的代码可以在Debugconfiguration下正常运行,在Releaseconfiguration下可能会失败,或者您可以确定在Debugconfiguration下testing并正常工作的代码也可以正常工作。
如果某个单线程程序需要执行10倍的时间,那么可以在其上运行一个分析器。 你也可以用“暂停”button停下来,你会看到它到底在做什么。 即使只比应该慢10%,如果再多停一下,不久你就会看到它多次做不必要的事情。 通常这个问题是一个函数调用,在堆栈中间的地方并不是真正需要的。 这不是衡量问题,但它确实find它。 编辑:反对意见主要假设你只采取1个样本。 如果你认真的话,就拿10分。任何造成一定百分比的代码,如40%的代码,都会平均出现在这部分样本上。 瓶颈(在单线程代码中)不能隐藏起来。 编辑:为了表明我的意思,许多反对意见的forms是“没有足够的样本,所以你看到的可能是完全虚假的” – 关于机会的模糊想法。 但是,如果有任何可识别的描述 ,不仅仅是例行活动或者例行活动,在30%的时间内是有效的,那么在任何给定的样本上看到它的概率是30%。 那么假设只有10个采样。 在10个样本中将出现问题的次数遵循二项分布 ,并且看到0次的概率是0.028。 看1次的概率是.121。 2次,概率是.233,3次是.267,之后下降。 由于看不到两次的概率是.028 + .121 = .139,这意味着看到它两次或更多次的概率是1 – .139 = .861。 一般的规则是如果你看到一些你可以修复两个或更多的样本,这是值得修复的。 在这种情况下,在10个样本中看到的机会是86%。 如果你有14%的人没有看到它,那么只需要更多的样本,直到你做。 (如果样本数量增加到20个,则看到它的次数增加到99%以上)。所以它没有被精确地测量,但是它被精确地find了,而且了解这一点很重要它可能很容易成为一个分析器实际上找不到的东西,比如涉及数据状态的东西,而不是程序计数器。
在Java的隐藏特性中 ,最佳答案提到了Double Brace Initialization ,其语法非常诱人: Set<String> flavors = new HashSet<String>() {{ add("vanilla"); add("strawberry"); add("chocolate"); add("butter pecan"); }}; 这个习语创build了一个匿名的内部类,只有一个实例初始化器,它可以使用“包含范围内的任何方法”。 主要问题:这听起来效率不高吗? 它的使用应该限于一次性的初始化吗? (当然,炫耀!) 第二个问题:新的HashSet必须是在实例初始化器中使用的“this”…任何人都可以阐明机制? 第三个问题:这个习语在生产代码中是不是太模糊了? 总结:非常非常好的答案,谢谢大家。 在问题(3)中,人们认为语法应该是清楚的(尽pipe我会build议偶然的评论,特别是如果你的代码会传递给可能不熟悉的开发人员)。 在问题(1)中,生成的代码应该快速运行。 额外的.class文件确实会导致jar文件混乱,并且程序启动稍微慢一些(感谢@coobird的测量)。 @Thilo指出,垃圾收集可能会受到影响,并且额外加载的类的内存成本在某些情况下可能是一个因素。 问题(2)是我最感兴趣的。 如果我理解了答案,那么DBI中发生的事情就是匿名内部类扩展了由new运算符构造的对象的类,因此具有引用正在构造的实例的“this”值。 井井有条。 总的来说,DBI让我觉得自己是一个知识分子的好奇心。 Coobird和其他人指出,你可以使用Arrays.asList,可变参数方法,Google Collections和build议的Java 7集合文字实现相同的效果。 像Scala,JRuby和Groovy等更新的JVM语言也为列表构build提供简洁的符号,并与Java良好的互操作性。 鉴于DBI混乱了类path,减慢了类的加载速度,并使代码更加隐晦,我可能会避开它。 不过,我打算在一位刚刚获得SCJP的朋友面前谈论这个问题,并且热衷于讨论Java语义。 ;-) 感谢大家! 7/2017:Baeldung对双支撑初始化有一个很好的总结 ,并认为它是一种反模式。
我们有问题是在C中的 i++和++i之间有性能差异吗? C ++的答案是什么?
我想知道我的Python应用程序的内存使用情况,特别想知道哪些代码块/部分或对象消耗了大部分内存。 谷歌search显示,商业版本是Python Memory Validator (仅限Windows)。 而开源的是PySizer和Heapy 。 我没有尝试任何人,所以我想知道哪一个是最好的考虑: 给大部分细节。 我必须对我的代码做最less的改动。
我需要使用Java逐行读取大约5-6 GB的大文本文件。 我怎样才能快速做到这一点?
以下所有说明都执行相同的操作:将%eax设置为零。 哪种方法是最佳的(需要最less的机器周期)? xorl %eax, %eax mov $0, %eax andl $0, %eax
使用call和apply来调用函数有什么区别? var func = function(){ alert('hello!'); }; func.apply(); VS func.call(); 这两种方法之间是否存在性能差异? 什么时候最好使用电话申请,反之亦然?