Hey,
I just wanted to share this code snippet which can be helpful to find where the imported invalidation comes from.
using SnoopCompileCore
using SnoopCompile
using SnoopCompile: countchildren
using Pkg
using Printf
toprints=[]
for (package, version) in Pkg.installed() # Pkg.depenencies()
@show package
invs = @snoopr @eval using $(Symbol(package))
trees = invalidation_trees(invs)
push!(toprints, (pkgname=package, invfunc=length(trees), sumchildren=sum([countchildren(tree) for tree in trees]), invalidations=length(invs)) )
end
sort!(toprints, by=x -> x[:sumchildren], rev=true)
for toprint in toprints
@printf "%-20s: invalidations: %3d which invalidated: %5d children (%5d invalidations)\n" toprint[:pkgname] toprint[:invfunc] toprint[:sumchildren] toprint[:invalidations]
end
For me I checked some of the package whether I really need them and just reduced a little latency by removing them.
StatsPlots : invalidations: 24 which invalidated: 2933 children ( 6726 invalidations)
PyCall : invalidations: 7 which invalidated: 1958 children ( 4285 invalidations)
JSON3 : invalidations: 4 which invalidated: 1438 children ( 2896 invalidations)
EllipsisNotation : invalidations: 7 which invalidated: 1066 children ( 2523 invalidations)
HTTP : invalidations: 4 which invalidated: 532 children ( 1110 invalidations)
JLD2 : invalidations: 3 which invalidated: 387 children ( 851 invalidations)
DataFrames : invalidations: 8 which invalidated: 363 children ( 1362 invalidations)
ORCA : invalidations: 5 which invalidated: 276 children ( 590 invalidations)
Flux : invalidations: 22 which invalidated: 193 children ( 2611 invalidations)
JuliaFormatter : invalidations: 2 which invalidated: 151 children ( 346 invalidations)
JLD : invalidations: 8 which invalidated: 127 children ( 335 invalidations)
BenchmarkTools : invalidations: 2 which invalidated: 103 children ( 216 invalidations)
GeometryTypes : invalidations: 9 which invalidated: 68 children ( 260 invalidations)
Makie : invalidations: 6 which invalidated: 34 children ( 591 invalidations)
KernelDensity : invalidations: 2 which invalidated: 26 children ( 84 invalidations)
GraphPlot : invalidations: 1 which invalidated: 14 children ( 54 invalidations)
Zygote : invalidations: 7 which invalidated: 12 children ( 129 invalidations)
LoopVectorization : invalidations: 1 which invalidated: 4 children ( 466 invalidations)
MethodAnalysis : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
Memoize : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
OrderedCollections : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
JuliaInterpreter : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
FastClosures : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
DataStructures : invalidations: 0 which invalidated: 0 children ( 20 invalidations)
Glob : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
Distributions : invalidations: 0 which invalidated: 0 children ( 88 invalidations)
JSON2 : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
Formatting : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
AbstractPlotting : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
FileIO : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
SnoopCompile : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
PackageCompiler : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
GLMakie : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
CSV : invalidations: 0 which invalidated: 0 children ( 16 invalidations)
Revise : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
SnoopCompileCore : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
ClusterManagers : invalidations: 0 which invalidated: 0 children ( 4 invalidations)
LRUCache : invalidations: 0 which invalidated: 0 children ( 60 invalidations)
Parameters : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
Redis : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
LightGraphs : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
NetworkLayout : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
DiffRules : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
Colors : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
WebSockets : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
Crayons : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
MacroTools : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
ChainRulesCore : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
I know it is not perfect. Any idea is appreciated.
Do you guys think it is useful?