Wolfram mathematica 框架标记->;单击窗格中的自动导致处理器持续活动

Wolfram mathematica 框架标记->;单击窗格中的自动导致处理器持续活动,wolfram-mathematica,Wolfram Mathematica,我发现ClickPane中的MatrixPlot会导致我的一个处理器内核在出现FrameTicks->Automatic选项时以大约50%的活动率循环。我已将代码缩减为以下内容(实际上没有任何作用): 切换到FrameTicks->None将停止核心活动 为了研究处理器行为,我让时钟在None和Automatic之间每隔20秒循环一次(首先移除上面的单击窗格): 这将显示以下处理器活动: 这是在我的Win7-64/MMA 8.0.1系统上 我的问题是: 这在其他系统上可重复吗 我是做错了

我发现
ClickPane
中的
MatrixPlot
会导致我的一个处理器内核在出现
FrameTicks->Automatic
选项时以大约50%的活动率循环。我已将代码缩减为以下内容(实际上没有任何作用):

切换到
FrameTicks->None
将停止核心活动

为了研究处理器行为,我让
时钟在
None
Automatic
之间每隔20秒循环一次(首先移除上面的单击窗格):

这将显示以下处理器活动:

这是在我的Win7-64/MMA 8.0.1系统上

我的问题是:

  • 这在其他系统上可重复吗
  • 我是做错了什么还是这是一个错误
  • 为什么裸的
    MatrixPlot[a]
    (没有任何
    FrameTicks
    设置)会有这些奇怪的frametick选项
赢得XP Mma 8.0


错过的峰值对应于笔记本被另一个窗口隐藏的时间。失去焦点不会停止CPU消耗。

在Mac OS X 10.6、Mathematica 8.0.1上也确认了这一点

我起初认为这与内核必须在每次设置
FrameTicks->Automatic
选项时重新计算滴答声的位置有关

所以我试了一下,得到了同样的结果。同样适用于
ArrayPlot

With[{fta = FrameTicks /. 
    FullForm[MatrixPlot[a, FrameTicks -> Automatic]][[1, 4]]},
 ClickPane[Dynamic@MatrixPlot[a, FrameTicks -> ft], # &]
  Dynamic[ft = {fta, None}[[Clock[{1, 2, 1}, 20]]]] ] 
但不是针对这个图-CPU使用率在这两种状态之间几乎没有变化:

ClickPane[
 Dynamic@Plot[Sin[x], {x, 0, 6 Pi}, Frame -> True, 
   FrameTicks -> ft], # &]
Dynamic[ft = {Automatic, None}[[Clock[{1, 2, 1}, 20]]]]
我只能推测,在这些光栅类型绘图上显示
FrameTicks
的方式肯定存在一些低效

在回答你的第三个问题时,奇数勾选不会在我的系统中重现


似乎
帧标记
选项的
自动
设置改变了
动态
可以看到的内部变量。它显然(我认为是错误的)没有本地化。这将导致对
动态
的参数进行完全重新评估

一个解决办法是添加
刷新
,这允许使用
跟踪符号
,这样我们就可以将触发限制为我们感兴趣的变量,在本例中是数组
A
帧标记
选项值
ft

ClickPane[
 Dynamic@
  Refresh[
   MatrixPlot[a, FrameTicks -> ft],
   TrackedSymbols -> {a, ft}],
 # &
 ]
Dynamic[ft = {Automatic, None}[[Clock[{1, 2, 1}, 20]]]]

我的处理器状态现在保持在接近零的水平。

在MacOS-10.6.8/MMA7.0.1.0学生版上运行代码时,MMA的cpu百分比在~1%到~16%之间变化,其中
FrameTicks
分别设置为
None
Automatic
。因此,它似乎已经在代码中出现了一段时间。在我的机器中,这与
自动
无关。ft={1,2},None}显示了相同的行为。@belisarius确实,它看起来像是将其设置为普通
None
之外的任何其他值,这样做…@belisarius{All,All}=活动,但{All,None}=inactive@belisarius可能是这样,但肯定是低水平的。在我的性能图表中看不到,这里没有。结果与以前一样。你确定你在测量内核活动吗?据我所知(这里我可能错了),
Ticks->Automatic
选项的精确值是由前端计算的,而不是由内核计算的。
ClickPane[
 Dynamic@Plot[Sin[x], {x, 0, 6 Pi}, Frame -> True, 
   FrameTicks -> ft], # &]
Dynamic[ft = {Automatic, None}[[Clock[{1, 2, 1}, 20]]]]
ClickPane[
 Dynamic@
  Refresh[
   MatrixPlot[a, FrameTicks -> ft],
   TrackedSymbols -> {a, ft}],
 # &
 ]
Dynamic[ft = {Automatic, None}[[Clock[{1, 2, 1}, 20]]]]