首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简图/修补程序中的漏电连接

简图/修补程序中的漏电连接
EN

Stack Overflow用户
提问于 2020-01-09 15:44:57
回答 1查看 225关注 0票数 1

我正在通过远程连接到janusGraph

代码语言:javascript
复制
cluster = Cluster.build()
                .addContactPoints(uri.split("\\|"))
                .port(port)
                .serializer(new GryoMessageSerializerV1d0(GryoMapper.build().addRegistry(JanusGraphIoRegistry.getInstance())))
                .maxConnectionPoolSize(poolSize)
                .maxContentLength(10000000)
                .create();
        gts = AnonymousTraversalSource
                .traversal()
                .withRemote(DriverRemoteConnection.using(cluster));

由于gts是threadSafe,所以我将gts保持在静态上下文中。每个线程使用相同的对象,并且没有一个线程通过调用gts.close()关闭gts (),每个线程运行查询,对于ex:result = gts.V().has("foo","bar").valueMap().toList(),I不关闭由gts.V()创建的gts(graphTraversalSource)而不是graphTraversal对象。

  • 是否应该关闭由gts(GraphTraversalSource)创建的每个graphTraversal对象。?
  • ,何时关闭这些对象?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-09 17:12:00

对于GraphTraversalSource,调用close()的需求取决于您构造对象的方式(例如,在您的情况下是"gts“)。DriverRemoteConnection上的javadocs解释了close()的需求。在特定情况下,将构建的Cluster对象传递给DriverRemoteConnection.using(),这意味着您希望自己控制Cluster的关闭,因此调用GraphTraversalSource.close()只会关闭GraphTraversalSource生成的用于完成其工作的任何Client实例。然后,您需要自己打电话给Cluster.close(),以便完全有序地关闭和释放资源。

close()在由GraphTraversalSource派生的GraphTraversal上的行为有一点不同,这取决于您是否正在远程处理。在您的示例中,您使用的是远程遍历,因此应该调用close()来释放服务器上的副作用(如果遍历生成任何副作用)。您的服务器是否为以后的检索收集副作用取决于您的实现,但是对于最不可知的代码,最好总是显式地这样做。请注意,遍历是在非远程(嵌入式)图形数据库上生成的,这些数据库被迭代到完成,例如hasNext()false,将触发对close()的调用并释放图形所持有的资源。例如,调用iterate()将自动触发close()

另外,在3.5.0中从TinkerPop协议中删除了对收集服务器上的副作用的支持,这样担心就会消失--服务器将不再有副作用保存在内存中,以供以后检索。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59667567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档