[
https://issues.apache.org/jira/browse/LUCENENET-640?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Shad Storhaug closed LUCENENET-640.
-----------------------------------
Resolution: Fixed
> Sequential IndexWriter performance in concurrent environments.
> --------------------------------------------------------------
>
> Key: LUCENENET-640
> URL: https://issues.apache.org/jira/browse/LUCENENET-640
> Project: Lucene.Net
> Issue Type: Bug
> Components: Lucene.Net Core
> Affects Versions: Lucene.Net 4.8.0
> Reporter: Mathias Henriksen
> Priority: Major
> Labels: performance
> Fix For: Lucene.Net 4.8.0
>
> Attachments: AssertFinalBug.jpg, IdentityWeakReferenceBug.jpg,
> Program.cs, overviewBug.jpg
>
> Time Spent: 1h 10m
> Remaining Estimate: 0h
>
> When creating Lucene.Net indices in parallel, sequential-like performance is
> experienced. Profiling 8 concurrent IndexWriter instances writing in parallel
> shows that WeakIdentityMap::IdentityWeakReference::Equals spends most time
> garbage collecting (94.91%) and TokenStream::AssertFinal (87.09% garbage
> collecting) in my preliminary tests (see screenshots).
> The
> [WeakIdentityMap|https://github.com/apache/lucenenet/blob/master/src/Lucene.Net/Util/WeakIdentityMap.cs]
> implementation uses an IdentityWeakReference as key, which is implemented as
> a class. By inspection of this class, it is merely a
> System.Runtime.InteropServices.GCHandle wrapper as can be seen in the mono
> project, manually wrapping of this struct in a struct rather than a class -
> will eliminate some of the immense amounts of garbage collection.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)