You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucenenet.apache.org by "Mathias Henriksen (Jira)" <ji...@apache.org> on 2020/01/13 16:36:00 UTC
[jira] [Created] (LUCENENET-640) Sequential IndexWriter performance
in concurrent environments.
Mathias Henriksen created LUCENENET-640:
-------------------------------------------
Summary: 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
Fix For: Lucene.Net 4.8.0
Attachments: AssertFinalBug.jpg, IdentityWeakReferenceBug.jpg, Program.cs, overviewBug.jpg
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.3.4#803005)