[ 
https://issues.apache.org/jira/browse/LUCENENET-640?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17032448#comment-17032448
 ] 

Elad Margalit edited comment on LUCENENET-640 at 2/7/20 3:16 PM:
-----------------------------------------------------------------

Hi [~nightowl888],

I think [~ayende] faced same issue, 

take a look 
here[here|[https://ayende.com/blog/189793-A/the-design-and-implementation-of-a-better-threadlocal-t]]
 


was (Author: eladmarg):
Hi [~nightowl888],

I think [~ayende] faced same issue, 

take a look 
[here|[https://ayende.com/blog/189793-A/the-design-and-implementation-of-a-better-threadlocal-t]]

> 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.3.4#803005)

Reply via email to