From 39f30eab7afcdcdc30cdaa29ef2a19e0c7222b70 Mon Sep 17 00:00:00 2001 From: Anthony Whitford Date: Fri, 9 Oct 2015 00:38:55 -0700 Subject: [PATCH] Re-use Document and Field instances to minimize GC overhead. See http://wiki.apache.org/lucene-java/ImproveIndexingSpeed --- .../data/cpe/CpeMemoryIndex.java | 31 +++++++------------ 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/dependency-check-core/src/main/java/org/owasp/dependencycheck/data/cpe/CpeMemoryIndex.java b/dependency-check-core/src/main/java/org/owasp/dependencycheck/data/cpe/CpeMemoryIndex.java index 15bbdcdb1..90ab76711 100644 --- a/dependency-check-core/src/main/java/org/owasp/dependencycheck/data/cpe/CpeMemoryIndex.java +++ b/dependency-check-core/src/main/java/org/owasp/dependencycheck/data/cpe/CpeMemoryIndex.java @@ -173,24 +173,6 @@ public final class CpeMemoryIndex { return new PerFieldAnalyzerWrapper(new FieldAnalyzer(LuceneUtils.CURRENT_VERSION), fieldAnalyzers); } - /** - * Saves a CPE IndexEntry into the Lucene index. - * - * @param vendor the vendor to index - * @param product the product to index - * @param indexWriter the index writer to write the entry into - * @throws CorruptIndexException is thrown if the index is corrupt - * @throws IOException is thrown if an IOException occurs - */ - public void saveEntry(String vendor, String product, IndexWriter indexWriter) throws CorruptIndexException, IOException { - final Document doc = new Document(); - final Field v = new TextField(Fields.VENDOR, vendor, Field.Store.YES); - final Field p = new TextField(Fields.PRODUCT, product, Field.Store.YES); - doc.add(v); - doc.add(p); - indexWriter.addDocument(doc); - } - /** * Closes the CPE Index. */ @@ -230,9 +212,20 @@ public final class CpeMemoryIndex { final IndexWriterConfig conf = new IndexWriterConfig(LuceneUtils.CURRENT_VERSION, analyzer); indexWriter = new IndexWriter(index, conf); try { + // Tip: reuse the Document and Fields for performance... + // See "Re-use Document and Field instances" from + // http://wiki.apache.org/lucene-java/ImproveIndexingSpeed + final Document doc = new Document(); + final Field v = new TextField(Fields.VENDOR, Fields.VENDOR, Field.Store.YES); + final Field p = new TextField(Fields.PRODUCT, Fields.PRODUCT, Field.Store.YES); + doc.add(v); + doc.add(p); + final Set> data = cve.getVendorProductList(); for (Pair pair : data) { - saveEntry(pair.getLeft(), pair.getRight(), indexWriter); + v.setStringValue(pair.getLeft()); + p.setStringValue(pair.getRight()); + indexWriter.addDocument(doc); } } catch (DatabaseException ex) { LOGGER.debug("", ex);