public void ParsingRdfXmlStreamingDoesNotExhaustMemory() { IGraph g = new Graph(); GraphHandler graphHandler = new GraphHandler(g); PagingHandler paging = new PagingHandler(graphHandler, 1000); CountHandler counter = new CountHandler(); ChainedHandler handler = new ChainedHandler(new IRdfHandler[] { paging, counter }); GZippedRdfXmlParser parser = new GZippedRdfXmlParser(RdfXmlParserMode.Streaming); parser.Load(handler, @"resources\oom.rdf.gz"); Assert.False(g.IsEmpty); Assert.Equal(1000, counter.Count); // Note that the source produces some duplicate triples so triples in the graph will be at most 1000 Assert.True(g.Triples.Count <= 1000); }
// =============================================================================== // Invoke // ====== public PagingResultBean <ENTITY> InvokePaging(PagingHandler <ENTITY> handler) { AssertObjectNotNull("handler", handler); PagingBean pagingBean = handler.PagingBean; AssertObjectNotNull("handler.getPagingBean()", pagingBean); if (!pagingBean.IsFetchScopeEffective) { String msg = "The paging bean is not effective about fetch-scope!"; msg = msg + " When you select page, you should set up fetch-scope of paging bean(Should invoke fetchFirst() and fetchPage()!)."; msg = msg + " The paging bean is: " + pagingBean; throw new SystemException(msg); } int allRecordCount; IList <ENTITY> selectedList; if (_countLater) // not implemented about performance optimization { selectedList = handler.Paging(); allRecordCount = handler.Count(); } else { allRecordCount = handler.Count(); selectedList = handler.Paging(); } PagingResultBean <ENTITY> rb = new ResultBeanBuilder <ENTITY>(_tableDbName).BuildPagingResultBean(pagingBean, allRecordCount, selectedList); if (pagingBean.CanPagingReSelect && IsNecessaryToReadPageAgain(rb)) { pagingBean.FetchPage(rb.AllPageCount); int reAllRecordCount = handler.Count(); IList <ENTITY> reSelectedList = handler.Paging(); return(new ResultBeanBuilder <ENTITY>(_tableDbName).BuildPagingResultBean(pagingBean, reAllRecordCount, reSelectedList)); } else { return(rb); } }