我正在实现一个算法,并希望测量它的时间和内存消耗.在我的帮助下,我编写了自己的测量实用程序,它可以读取/proc/[pid]/stat
用户和系统消耗的时间量,以及虚拟内存和常驻设置的峰值大小.(我不是100%清楚这两个内存统计数据之间的差异,但这不是手头的问题.)
到目前为止一直很好,但随之而来的是第三方实施,我希望比较我自己的程序.由于我不想摆弄它的来源,我无法使用我自己的测量程序收集有关其效率的数据(我可能会,但它需要我重新考虑我的测量方案).所以我发现/usr/bin/time
也采取了这些措施.
当我比较输出时,我发现/usr/bin/time
确实报告与我自己的工具相同的时间使用,但内存数据是非常不同的.首先,/usr/bin/time
不报告有关虚拟内存使用情况的任何内容,它仅提供最大驻留集大小的帖子.其次,报告的居民规模大小/usr/bin/time
比我自己的措施大六到八倍.
所以,我一直试图找出/usr/bin/time
实际测量的方式,以及差异为何如此根本.另外,哪个是正确的值?
输出示例(单位为MB):
<program>: <virtual mem> <resident set size>
autotest (my own utility): 23.2266 2.19531
/usr/bin/time: N/A 11.23437
Run Code Online (Sandbox Code Playgroud)
我使用的是GNU/Linux 3.8.13 Mageia 3 x86_64.
编辑:作为一个信心提升,我发现KDE系统监视器支持我自己的实用程序报告的数据.事实上,它从我所在的地方获取信息.因此,信任数据/proc/[pid]/stat
应该非常安全.但问题仍然存在......
编辑2:在下面的答案的帮助下,推断出这wait3()
是GNU使用的命令time
.它以手册页getrusage(2)中描述的形式返回数据.在RSS上,它说:
这是使用的最大驻留集大小(以千字节为单位).
手册页也指proc/[pid]/stat
,其中说
驻留集大小:进程在实际内存中的页数.这只是计算文本,数据或堆栈空间的页面.这不包括未加载需求或换出的页面.
那么,第二个版本在短短的测量更加精确我的程序的内存使用情况,并在第一个版本还可以测量某种外部库使用的?
我使用JFrame作为主框架的弹出窗口,用户应输入一些信息,然后按确定.但问题是,一旦这个子框架打开,我希望程序在按下OK按钮之前忽略任何其他信号,类似于JOptionPanes的操作方式.就像现在一样,你可以点击按钮多次打开子框架,从而获得几个框架,这不是意图(它甚至会导致很多错误).
我可以使用一个布尔值来解决它,一旦按下确定按钮就是真的,但这似乎不是一个很好的解决方法.我觉得还有其他一些方法可以做到这一点,因为我可以看到来自我的JOptionPanes的广受欢迎的效果,但却无法实现.
干杯.