DotnetRdf - ResultSetHandler Загружает результаты в память, а не передает их в потоковом режиме или выдает один за другим.

Я использую библиотеку DotnetRDF для подключения к удаленной конечной точке SPARQL и выполнения запроса SPARQL.

В настоящее время приложение выдает ошибку Out of memory; Я просмотрел код DotnetRDF, чтобы выяснить основную причину этой проблемы. Кажется, это связано с сохранением всего набора результатов в памяти, а не с его потоковой передачей (после потоковой передачи/чтения ответа от HTTPWebResponse).

После получения успешного HTTP-ответа часть анализа (например, SparqlCsvParser) все результаты (типа SparqlResult) добавляются в список в SparqlResultSet. Не может ли это привести к ошибке нехватки памяти?

Я хотел бы знать, есть ли какие-либо методы, доступные в DotnetRDF, чтобы лениво возвращать набор результатов один за другим, а не загружать все в память?


person Mathavan.M    schedule 14.10.2015    source источник


Ответы (1)


См. документацию по API обработчиков, которая описана следующим образом:

API обработчиков — это мощный API, позволяющий выполнять потоковую обработку результатов RDF и SPARQL. Его можно использовать практически в любой части API, которая работает с результатами RDF или SPARQL.

Вы можете ознакомиться с документацией по API для ISparqlResultsHandler. для встроенных реализаций или напишите свою собственную по мере необходимости.

Обратите внимание, что не обязательно получать результаты лениво, это просто позволяет вам контролировать, как обрабатываются проанализированные результаты. Если вам нужно обработать их ленивым способом, вы, вероятно, можете сделать это, используя блокирующую очередь с фиксированной емкостью (хотя вам, вероятно, потребуется перенести синтаксический анализ в фоновый поток, чтобы это работало)

person RobV    schedule 15.10.2015