如果某个东西正在使单线程程序占用,比如10倍,那么就可以在其上运行一个分析器.您也可以通过"暂停"按钮暂停它,您将看到它正在做什么.
即使它比它应该慢了10%,如果你停止它多次,不久你会看到它反复做不必要的事情.通常问题是在堆栈中间某处不是真正需要的函数调用.这不能衡量问题,但确实找到了.
编辑:反对意见主要假设您只采取1个样本.如果你是认真的,请采取10.任何一行代码,导致一定比例的浪费,如40%,将平均出现在该部分样本的堆栈上.瓶颈(单线程代码)无法隐藏它.
编辑:为了表明我的意思,许多反对意见的形式是"没有足够的样本,所以你看到的可能完全是虚假的" - 关于机会的模糊观点.但是,如果任何可识别的描述,不仅仅是在常规或常规活动中,在30%的时间内有效,那么在任何给定样本上看到它的概率是30%.
然后假设只采集了10个样本.在10个样本中看到问题的次数遵循二项分布,并且看到它0次的概率是.028.看到它1次的概率是.121.2次,概率为.233,而3次则为.267,之后下降.由于看到它少于两次的概率是.028 + .121 = .139,这意味着看到它两次或更多次的概率是1 - .139 = .861.一般规则是,如果您看到可以修复两个或更多样本的内容,则值得修复.
在这种情况下,在10个样本中看到它的机会是86%.如果你是14%没有看到它的人,那就去做更多的样品.(如果样本数量增加到20,那么两次或多次观察的几率会增加到99%以上.)所以它没有经过精确测量,但已经准确找到了,重要的是要了解它它可能很容易成为分析器无法实际找到的东西,例如涉及数据状态的东西,而不是程序计数器.
我有一个使用多线程的Java大程序.在某些情况下,程序开始使用我的八核系统的三个核心中的100%.在正常使用中,程序使用1-2%的所有核心.如何找到超载核心的类?
我正在构建一个包含15x15 = 225个按钮的控件,需要调整大小.因为它是一个网格,锚定和对接将不起作用.我已经尝试了TableLayoutPanel以及处理resize事件来手动放置和调整控件.在这两种情况下,调整大小都是慢得令人无法接受的.当我手动处理布局时,在调整大小功能中暂停/恢复布局没有帮助.
有什么基本的东西我可以改变以加快速度,或者这只是本机控制的限制?我知道我可以从头开始构建自定义控件,处理点击并自己绘画 - 尽管如果可能的话我宁愿坚持使用原生控件.
编辑
我知道这是很多按钮.我的问题是技术问题; 不是关于UI设计的.
我在Windows上,在MinGW下构建的可执行文件上运行GDB.该程序具有无限循环.我想通过点击Ctrl+ 来找到它C.当我这样做时,程序和GDB都会退出.关于这个主题的所有帮助似乎都假设我在Linux上.
我曾经研究过许多利用代码生成的产品.它似乎是实现高度用户可定制性和高执行速度的唯一方法.
缺点是我们要求用户安装编译器(主要在MS Windows上).
这一直是一个令人头痛的问题,因为像MS这样的供应商一直在淘汰编译器,有些用户往往安装了多个编译器.
我们正在考虑使用GNU C,可能还有C++,但即使在那里,也存在持续的版本问题.
我考虑过可能会生成汇编语言,试图摆脱编译器版本的跑步机,但汇编语言都是机器特定的.
理想情况下,可以通过某种方式生成生成的代码,这些代码具有灵活性,运行速度快,并且不会让我们看到第三方提供商的突发奇想.
也许我忽略了一些简单的东西,比如Java.任何想法,将不胜感激.谢谢.
宏扩展和代码生成都有利弊.你最喜欢的方法是什么?为什么?我们何时应该选择其中一个?请提出建议.谢谢!
宏扩展可以非常方便和有用:http: //dtemplatelib.sourceforge.net/table.htm
VS
代码生成为您提供了大量优秀的代码:http : //code.google.com/p/protobuf/ http://incubator.apache.org/thrift/
根据这个,gfortran可以进行整数逻辑转换,但是我收到了这个错误:
if (.not.bDropped.and.(zz_unif01() .lt. (1 - (Test_Dru
1
Error: Operand of .not. operator at (1) is INTEGER(4)
Run Code Online (Sandbox Code Playgroud)
我知道这将是更好的代码从改变.not.bDropped到(bDropped.eq.0),但因为它生成的代码不会是简单的.
我试过各种各样的-std=xxx旗帜,但没有区别.
我试图通过连接较小的表达式在R中构建表达式.例如在S +中我可以这样做:
> x = substitute({a;b;c})
> y = substitute({d;e;f})
> c(x,y)
{
a
b
c
d
e
f
}
Run Code Online (Sandbox Code Playgroud)
但如果我在R中尝试它,我得到这个:
> c(x,y)
[[1]]
{
a
b
c
}
[[2]]
{
d
e
f
}
Run Code Online (Sandbox Code Playgroud)
我应该这样做吗?
有没有人知道replicate()函数在R中是如何工作的以及它相对于使用for循环的效率如何?
例如,......之间是否存在效率差异?
means <- replicate(100000, mean(rnorm(50)))
Run Code Online (Sandbox Code Playgroud)
和...
means <- c()
for(i in 1:100000) {
means <- c(means, mean(rnorm(50)))
}
Run Code Online (Sandbox Code Playgroud)
(我可能在上面略微打了一些东西,但你明白了.)
我经历了一个对量子计算机如何工作以及如果它们变得实用可能对它们有益的事情感兴趣的时期.我知道他们正在谈论代码破解.我感兴趣的是通过基本上尝试所有可能的输入(并行)并查看是否达到任何错误状态来使用它们来验证软件.
我知道这是一个蓝天问题,但我想知道其他人是否对量子计算机感兴趣,它们如何工作,以及它们对什么有用.
补充:为了好玩,让我扔掉一个迷你教程:
假设您有N位内存可供使用.假设您可以使用输入数据加载这些位(或其中一些位).然后假设你可以对它们进行有限的操作序列(不使用任何额外的内存),将答案留在其中.
要使用量子计算机,只需要确保整个计算是可逆的,通过保留一些位来记录您所采用的分支,这样就可以撤消它们.如果这样做,那么所有操作都可以写成N位上的简单酉矩阵变换.(酉变换是N维坐标系中的纯旋转.)因此,执行计算包括在位向量上应用一系列纯旋转.
如果你这样做,那么如果N位向量在量子计算机中,它可以被初始化为一个状态,其中所有2 ^ N(或更少)可能的输入在"并行宇宙"中同时叠加.然后,如果你进行计算,它会同时完成所有这些操作.
现在你需要做的就是看看其中一个输入是否给你一个特定的答案就是让它运行到一个特定的状态.如果你停下来并检查状态,它的作用就是随机选择一个宇宙并扔掉所有其余的宇宙.因此,Grover算法允许您执行的操作是,在不停止的情况下,强调具有答案状态的Universe的概率.然后向前运行,然后向后运行,然后向前运行,依此类推,进行多次迭代,直到答案范围具有非常高的概率.然后,如果你检查它,你很有可能看到你想要的答案.
嗯...