Performance 使用JGraphT版本0.8.2构建图形比使用版本1.3.0更快
我正在构建一个超过90000条边的图形:Performance 使用JGraphT版本0.8.2构建图形比使用版本1.3.0更快,performance,version,jgrapht,Performance,Version,Jgrapht,我正在构建一个超过90000条边的图形: DefaultDirectedGraph graph = ... graph.addVertex(keyFrom); graph.addVertex(keyTo); graph.addEdge(keyFrom, keyTo); 对于新版本,我有以下结果: 构建图耗时13596毫秒边数:90469 构建图占用14354毫秒边数:94309 BUILD_GRAPH占用6647毫秒边数:90465 对于旧版本,我有以下结果: 构建图耗时5081毫秒边数
DefaultDirectedGraph graph = ...
graph.addVertex(keyFrom);
graph.addVertex(keyTo);
graph.addEdge(keyFrom, keyTo);
对于新版本,我有以下结果:
- 构建图耗时13596毫秒边数:90469
- 构建图占用14354毫秒边数:94309
- BUILD_GRAPH占用6647毫秒边数:90465
- 构建图耗时5081毫秒边数:90469
- 构建图占用3949毫秒边数:94309
- 构建图占用4351毫秒边数:90466
UniformIntrusiveEdgesSpecifics:
return edgeMap.putIfAbsent(e, intrusiveEdge) == null;
我试图改进vertex的哈希代码。但这没有帮助。
我想切换到lib的新版本。但性能是一个问题。你知道为什么新版本的lib速度较慢吗?我发现:
- 该图没有90000条大边,但它有300万条边!只有使用大图,您才能观察到性能上的差异李>
- 如果覆盖图表的containsEdge方法,则旧版本的性能是新版本的三倍
新的DefaultDirectedGraph(StandardFieldConnKeyEdge.class){
@Override public StandardFieldConnKeyEdge addEdge(final GraphNode sourceVertex, final GraphNode targetVertex) { return super.addEdge(sourceVertex, targetVertex); } @Override public boolean containsEdge(final GraphNode sourceVertex, final GraphNode targetVertex) { return false; } };
我有一个eclipse项目,它显示了这个问题!你能将这个问题发布到我们的github问题跟踪器上吗:在stackoverflow上用Q&a格式解决这个问题可能有点困难。在0.8.2和1.3.0之间做了很多更改。通常,1.3.0中的默认图需要更多的内存空间来构建,但最常见的图是Q查询速度更快。我们需要更多信息。