https://bz.apache.org/bugzilla/show_bug.cgi?id=64322
Bug ID: 64322
Summary: Very poor performance reading OLE2
Product: POI
Version: unspecified
Hardware: PC
Status: NEW
Severity: normal
Priority: P2
Component: POIFS
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ---
Created attachment 37154
--> https://bz.apache.org/bugzilla/attachment.cgi?id=37154&action=edit
Part 1 of 3
Attached file with 3.7MB takes more than 10min to be parsed with POI-4.0.1.
Profiling with jvisualvm, most time is spent in IOUtils.readFully() (360s),
FileBackedDataSource.size() (248s) and FileBackedDataSource.read() (88s). Code
to reproduce below:
public static void main(String[] args) {
File file = new File("F:\\teste-files\\thumbs.db\\New
Folder\\Thumbs.db");
try (POIFSFileSystem poiFS = new POIFSFileSystem(file)) {
recurseDir(poiFS.getRoot());
} catch (IOException e) {
e.printStackTrace();
}
}
private static void recurseDir(DirectoryEntry dir) {
for (Entry entry : dir) {
try {
if (entry instanceof DirectoryEntry) {
recurseDir((DirectoryEntry) entry);
}
if (entry instanceof DocumentEntry) {
DocumentEntry de = (DocumentEntry) entry;
HashMap<String, String> props = new HashMap<>();
try (DocumentInputStream dis = new DocumentInputStream(de))
{
props.put("name", de.getName());
if (PropertySet.isPropertySetStream(dis)) {
dis.mark(10000000);
PropertySet ps = null;
try {
ps = new PropertySet(dis);
} catch (UnsupportedEncodingException e) {
// ignore
}
if (ps != null) {
for (Section section : ps.getSections()) {
for (Property p : section.getProperties())
{
String prop = section.getDictionary()
!= null
?
section.getDictionary().get(p.getID())
: String.valueOf(p.getID());
if (p.getValue() != null)
props.put("property_" + prop,
p.getValue().toString());
}
}
}
dis.reset();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]