Am 07.11.2016 um 05:11 schrieb Paul Mackerras:
>> - Storing only the actually viewed diff. It's an interactive tool, so
>> there's no advantage in displaying the diff in 0.001 seconds over viewing it
>> in 0.1 seconds. As far as I can see, Gitk currently stores every diff it
>> gets a hold of forever.
> It does? That would be a bug. :)
>
So far I've found three arrays being populated lazily (which is good) but never
being released (which ignores changes to the underlying repo):
$commitinfo: one entry of about 500 bytes per line viewed in the list of
commits. Maximum size of the array is the number of commits. As far as I can
see, this array should be removed on a reload (Shift-F5).
$blobdifffd: one entry of about 45 bytes for every commit ever read. The
underlying file descriptor gets closed, but the entry in this array remains. So
far I didn't find the reason why this array exists at all. It's also not
removed on a reload.
$treediffs: always the same number of entries as $blobdiffd, but > 1000
bytes/entry. Removed/refreshed on a reload (good!), different number of entries
from that point on.
In case you want to play as well, here's the code I wrote for the
investigation, it can be appended right at the bottom of the gitk script:
--------------8<---------------
proc variableSizes {} {
# Add variable here to get them shown.
global diffcontext diffids blobdifffd currdiffsubmod commitinfo
global diffnexthead diffnextnote difffilestart
global diffinhdr treediffs
puts "---------------------------------------------------"
foreach V [info vars] {
if { ! [info exists $V] } {
continue
}
set count 0
set bytes 0
if [array exists $V] {
set count [array size $V]
foreach I [array get $V] {
set bytes [expr $bytes + [string bytelength $I]]
}
} elseif [catch {llength [set $V]}] {
set count [llength [set $V]]
# set bytes [string bytelength [list {*}[set $V]]]
} else {
set bytes [string bytelength [set $V]]
}
puts [format "%20s: %5d items, %10d bytes" $V $count $bytes]
}
# catch {
# set output [memory info]
# puts $output
# }
after 3000 variableSizes
}
variableSizes
-------------->8---------------
[memory info] requires a Tcl with memory debug enabled.
Markus
--
- - - - - - - - - - - - - - - - - - -
Dipl. Ing. (FH) Markus Hitter
http://www.jump-ing.de/