Skip to content

Trait 动态调度分析

分析范围: lib/algo/ 下所有 *.mbt 文件 统计方法: 通过 @core.TraitName::method_name 完全限定名模式匹配


Trait方法数总调用次数占比
GraphReadable12229~80%
GraphDirected615~5%
GraphWritable5680+几乎全部在测试代码中
GraphBatchReadable2少量仅 CSR/CSC 场景

排名方法调用次数比例主要调用方
1node_count8237.8%全部算法模块
2neighbors4118.9%遍历、连通性、图生成器
3node_ids3817.5%社区检测、着色、团检测
4contains_node219.7%匹配算法、连通性
5degree146.5%着色、中心性、匹配
6neighbors_with_weight115.1%最短路径、MST
7edges73.2%MST (Kruskal)、欧拉路径
8edge_count62.8%MST、统计
9get_edge62.8%双向 Dijkstra
10is_directed31.4%转换器、社区检测
11get_node00%未使用
12is_empty00%未使用
  • 高频(>10%): node_count, neighbors, node_ids — 应优先内联优化
  • 低频(0%): get_node, is_empty — 可考虑移除或标记 deprecated

排名方法调用次数比例调用来源
1out_degree640%拓扑排序、匹配、割点
2in_degree533.3%拓扑排序 (Kahn)、匹配
3successors213.3%流网络
4in_neighbors16.7%拓扑排序 (Kahn)
5predecessors16.7%拓扑排序 (Kahn)
6out_neighbors00%未使用(等同于 neighbors
  • out_degree, in_degree 最常用 — 优先优化
  • out_neighbors 未被使用 — 可考虑与 neighbors 统一

方法调用次数说明
add_edge356仅用在 *_test.mbt
add_node325仅用在 *_test.mbt
remove_node少量测试
remove_edge少量测试
clear少量测试

关键发现: add_edge + add_node 占 Writable 调用的 100%,但全部来自测试代码——算法代码不直接调用 Writable(符合纯函数设计)。


方法当前间接调用建议
node_count82 次全算法热点考虑存储内联 Getter
neighbors41 次遍历核心保持 Trait 抽象
node_ids38 次迭代热点配合 CSR batch 优化
方法当前调用数建议
get_node0标记 deprecated,v2.0 移除
is_empty0用户应直接调用 node_count == 0
out_neighbors0neighbors 合并