You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2020/01/30 08:15:54 UTC
[lucenenet] 05/09: Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader:
Removed locking for ordsCache when using ConditionalWeakTable (See
LUCENENET-610, LUCENENET-640, LUCENENET-630)
This is an automated email from the ASF dual-hosted git repository.
nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit c867278bc317fe808615a2fe17acc20b5e161a23
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Mon Jan 27 05:03:10 2020 +0700
Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader: Removed locking for ordsCache when using ConditionalWeakTable (See LUCENENET-610, LUCENENET-640, LUCENENET-630)
---
.../Taxonomy/CachedOrdinalsReader.cs | 30 ++++++++--------------
1 file changed, 10 insertions(+), 20 deletions(-)
diff --git a/src/Lucene.Net.Facet/Taxonomy/CachedOrdinalsReader.cs b/src/Lucene.Net.Facet/Taxonomy/CachedOrdinalsReader.cs
index 92909f7..d67b7ff 100644
--- a/src/Lucene.Net.Facet/Taxonomy/CachedOrdinalsReader.cs
+++ b/src/Lucene.Net.Facet/Taxonomy/CachedOrdinalsReader.cs
@@ -1,6 +1,7 @@
using Lucene.Net.Support;
using System;
using System.Diagnostics.CodeAnalysis;
+using System.Linq;
using System.Runtime.CompilerServices;
using System.Threading;
@@ -78,26 +79,24 @@ namespace Lucene.Net.Facet.Taxonomy
private CachedOrds GetCachedOrds(AtomicReaderContext context)
{
+ object cacheKey = context.Reader.CoreCacheKey;
+#if FEATURE_CONDITIONALWEAKTABLE_ENUMERATOR
+ return ordsCache.GetValue(cacheKey, (cacheKey) => new CachedOrds(source.GetReader(context), context.Reader.MaxDoc));
+#else
lock (this)
{
- object cacheKey = context.Reader.CoreCacheKey;
if (!ordsCache.TryGetValue(cacheKey, out CachedOrds ords) || ords == null)
{
ords = new CachedOrds(source.GetReader(context), context.Reader.MaxDoc);
- ordsCache.AddOrUpdate(cacheKey, ords);
+ ordsCache[cacheKey] = ords;
}
return ords;
}
+#endif
}
- public override string IndexFieldName
- {
- get
- {
- return source.IndexFieldName;
- }
- }
+ public override string IndexFieldName => source.IndexFieldName;
public override OrdinalsSegmentReader GetReader(AtomicReaderContext context)
{
@@ -199,19 +198,10 @@ namespace Lucene.Net.Facet.Taxonomy
public virtual long RamBytesUsed()
{
+#if !FEATURE_CONDITIONALWEAKTABLE_ENUMERATOR
lock (this)
- {
- long bytes = 0;
-#if FEATURE_CONDITIONALWEAKTABLE_ENUMERATOR
- foreach (var pair in ordsCache)
- bytes += pair.Value.RamBytesUsed();
-#else
- foreach (CachedOrds ords in ordsCache.Values)
- bytes += ords.RamBytesUsed();
#endif
-
- return bytes;
- }
+ return ordsCache.Sum(pair => pair.Value.RamBytesUsed());
}
}
}
\ No newline at end of file