0

リモート SPARQL エンドポイントに接続し、SPARQL クエリを実行するために、DotnetRDF ライブラリを使用しています。

現在、アプリケーションはメモリ不足エラーをスローしています。この問題の根本原因を突き止めるために、DotnetRDF コードを調べました。結果セットをストリーミングするのではなく、すべての結果セットをメモリに保存しているためと思われます(HTTPWebResponseからの応答のストリーミング/読み取り後)。

成功した HTTP 応答を取得した後、解析の一部 (例:SparqlCsvParser) のすべての結果 (タイプ SparqlResult) が SparqlResultSet のリストに追加されます。これにより、メモリ不足エラーが発生することはありませんか?

すべてをメモリにロードするのではなく、結果セットを 1 つずつ遅延して返すために DotnetRDF で使用できるメソッドがあるかどうかを知りたいですか?

4

1 に答える 1

0

次のように説明されているハンドラー APIのドキュメントを参照してください。

Handlers API は、RDF および SPARQL 結果のストリーム処理を可能にする強力な API です。これは、RDF または SPARQL の結果を処理する API のほぼすべての部分で使用できます。

組み込みの実装については、 ISparqlResultsHandlerの API ドキュメントを参照するか、必要に応じて独自の実装を作成できます。

必ずしも怠惰な方法で結果を取得するとは限らないことに注意してください。解析された結果の処理方法を制御できるようにするだけです。それらを怠惰な方法で処理する必要がある場合は、固定容量のブロッキング キューを使用してこれを行うことができます (ただし、解析をバックグラウンド スレッドにプッシュして機能させる必要があります)。

于 2015-10-15T13:34:20.017 に答える