0

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

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

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

我想知道DotnetRDF中是否有任何方法可以懒惰地一一返回结果集而不是将所有内容加载到内存中?

4

1 回答 1

0

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

处理程序 API 是一个功能强大的 API,它允许对 RDF 和 SPARQL 结果进行流处理。它几乎可以用于与 RDF 或 SPARQL 结果一起工作的 API 的任何部分。

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

请注意,不一定以惰性方式获得结果,它只是允许您控制解析结果的处理方式。如果您需要以惰性方式处理它们,您可以使用具有固定容量的阻塞队列来执行此操作(尽管您可能需要将解析推送到后台线程才能工作)

于 2015-10-15T13:34:20.017 回答