DotnetRdf - ResultSetHandler 将结果加载到内存中,而不是逐个流式传输或生成结果
DotnetRdf - ResultSetHandler Loads the results into memory rather than streaming or yeilding it one by one
我正在使用 DotnetRDF 库连接到远程 SPARQL 端点并执行 SPARQL 查询。
当前应用程序抛出内存不足错误;我查看了 DotnetRDF 代码以找出此问题的根本原因。这似乎是因为将所有结果集保存到内存中而不是流式传输(在 HTTPWebResponse 的 streaming/reading 响应之后)。
获得成功的HTTP响应后,部分Parsing(Eg:SparqlCsvParser)将所有结果(SparqlResult类型)添加到SparqlResultSet中的一个List中。这不会导致内存不足错误吗?
我想知道在 DotnetRDF 中是否有任何方法可以延迟 return 结果集一个一个地加载而不是将所有内容都加载到内存中?
参见Handlers API的文档,其描述如下:
The Handlers API is a powerful API that permits the stream processing
of RDF and SPARQL Results. It can be used in virtually any part of the
API that works with RDF or SPARQL results.
您可以查看 API 文档以了解 ISparqlResultsHandler 的内置实现,或者根据需要自行编写。
请注意,不一定以惰性方式获取结果,它只是允许您控制解析结果的处理方式。如果您需要以惰性方式处理它们,您可以通过使用具有固定容量的阻塞队列来实现(尽管您可能需要将解析推送到后台线程才能工作)
我正在使用 DotnetRDF 库连接到远程 SPARQL 端点并执行 SPARQL 查询。
当前应用程序抛出内存不足错误;我查看了 DotnetRDF 代码以找出此问题的根本原因。这似乎是因为将所有结果集保存到内存中而不是流式传输(在 HTTPWebResponse 的 streaming/reading 响应之后)。
获得成功的HTTP响应后,部分Parsing(Eg:SparqlCsvParser)将所有结果(SparqlResult类型)添加到SparqlResultSet中的一个List中。这不会导致内存不足错误吗?
我想知道在 DotnetRDF 中是否有任何方法可以延迟 return 结果集一个一个地加载而不是将所有内容都加载到内存中?
参见Handlers API的文档,其描述如下:
The Handlers API is a powerful API that permits the stream processing of RDF and SPARQL Results. It can be used in virtually any part of the API that works with RDF or SPARQL results.
您可以查看 API 文档以了解 ISparqlResultsHandler 的内置实现,或者根据需要自行编写。
请注意,不一定以惰性方式获取结果,它只是允许您控制解析结果的处理方式。如果您需要以惰性方式处理它们,您可以通过使用具有固定容量的阻塞队列来实现(尽管您可能需要将解析推送到后台线程才能工作)