DotnetRdf - ResultSetHandler将结果加载到内存中,而不是逐个流式传输或逐步构建

时间:2015-10-14 14:44:26

标签: rdf sparql dotnetrdf

我正在使用DotnetRDF库连接到远程SPARQL端点并执行SPARQL查询。

目前应用程序丢失了内存错误;我查看了DotnetRDF代码,找出了这个问题的根本原因。这似乎是因为将所有结果集保存到内存而不是流式传输(从HTTPWebResponse流式传输/读取响应之后)。

获得成功的HTTP响应后,部分解析(例如:SparqlCsvParser)将所有结果(SparqlResult类型)添加到SparqlResultSet的List中。这可能不会导致内存不足错误吗?

我想知道DotnetRDF中是否有任何方法可以逐个延迟返回结果集而不是将所有内容加载到内存中?

1 个答案:

答案 0 :(得分:0)

请参阅Handlers API上的文档,其描述如下:

  

Handlers API是一个功能强大的API,允许流处理   RDF和SPARQL结果。它几乎可以用于任何部分   适用于RDF或SPARQL结果的API。

您可以查看内置实现的ISparqlResultsHandler API文档,也可以根据需要编写自己的文档。

请注意,并不一定以懒惰的方式获得结果,它只是允许您控制解析结果的处理方式。如果你需要以懒惰的方式处理它们,你可以通过使用具有固定容量的阻塞队列来实现这一点(尽管你可能需要将解析推送到后台线程以使其工作)