2015-10-14 28 views
0

我使用DotnetRDF庫連接到遠程SPARQL端點並執行SPARQL查詢。DotnetRdf - ResultSetHandler將結果加載到內存中,而不是逐行加載或逐行加載

目前應用程序正在拋出內存不足錯誤;我看了一下DotnetRDF代碼來找出這個問題的根本原因。這似乎是因爲將所有結果集保存到內存中,而不是流式傳輸(在HTTPWebResponse的流式傳輸/讀取響應之後)。

獲得成功的HTTP響應後,部分解析(例如:SparqlCsvParser)將所有結果(類型爲SparqlResult)添加到SparqlResultSet的列表中。這可能不會導致內存不足的錯誤?

我想知道DotnetRDF中是否有任何方法可以一個接一個地慢慢返回結果集,而不是將所有內容都加載到內存中?

回答

0

見被描述爲下面的Handlers API的文檔:

處理程序API是一個功能強大的API,允許RDF和SPARQL結果的流處理 。它幾乎可用於 API的任何與RDF或SPARQL結果配合使用的部分。

您可以查看內置實現的ISparqlResultsHandler的API文檔,或根據需要編寫自己的文檔。

請注意,不一定以懶惰的方式獲得結果,它只是允許您控制處理解析結果的方式。如果你需要以一種懶惰的方式來處理它們,你可以通過使用一個具有固定容量的阻塞隊列來做到這一點(儘管你可能需要將解析推到後臺線程上才能工作)