[
https://issues.apache.org/jira/browse/LUCENENET-106?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12665560#action_12665560
]
TJ Kolev commented on LUCENENET-106:
------------------------------------
Wow guys, lots of action, good work.
On Digy's last comment, how about the following enumerator. Tests I have pass.
But I am not certain it totally lives up to the expected IDictionaryEnumerator
semantics. The enumerator relies on the Keys from the WeakHashTable to get the
right elements.
tjk :)
{noformat}
class WeakDictionaryEnumerator : IDictionaryEnumerator
{
private ArrayList _entries = null;
private int _currentNdx = -1;
public WeakDictionaryEnumerator(WeakHashTable tbl)
{
_entries = new ArrayList(tbl.Keys.Count);
foreach(object key in tbl.Keys)
{
_entries.Add(new DictionaryEntry(key,
tbl[key]));
}
}
public object Key
{
get { return Entry.Key; }
}
public object Value
{
get { return Entry.Value; }
}
public DictionaryEntry Entry
{
get { return (DictionaryEntry)
_entries[_currentNdx]; }
}
public bool MoveNext()
{
if (_currentNdx + 1 >= _entries.Count)
return false;
_currentNdx++;
return true;
}
public void Reset()
{
_currentNdx = -1;
}
public object Current
{
get { return Entry; }
}
}
{noformat}
In WeakHashTable:
{noformat}
public override IDictionaryEnumerator GetEnumerator()
{
return new WeakDictionaryEnumerator(this);
}
{noformat}
> Lucene.NET (Revision: 603121) is leaking memory
> -----------------------------------------------
>
> Key: LUCENENET-106
> URL: https://issues.apache.org/jira/browse/LUCENENET-106
> Project: Lucene.Net
> Issue Type: Bug
> Environment: .NET 2.0
> Reporter: Anton K.
> Assignee: Digy
> Priority: Critical
> Attachments: DIGY-FieldCacheImpl.patch, Digy.rar,
> luceneSrc_memUsage.patch, Paches for v2.3.1.rar, WeakHashTable v2.patch,
> WeakHashTable v2.patch, WeakHashTable+FieldCacheImpl.rar,
> WeakHashTable_ep.zip, WeakHashTable_ep_v2.zip, WeakHashTable_tj.zip,
> WeakReferences.rar
>
>
> readerCache Hashtable field (see FieldCacheImpl.cs) never releases some hash
> items that have closed IndexReader object as a key. So a lot of Term
> instances are never released.
> Java version of Lucene uses WeakHashMap and therefore doesn't have this
> problem.
> This bug can be reproduced only when Sort functionality used during search.
> See following link for additional information.
> http://www.gossamer-threads.com/lists/lucene/java-user/55681
> Steps to reproduce:
> 1)Create index
> 2) Modify index by IndexWiter; Close IndexWriter
> 3) Use IndexSearcher for searching with Sort; Close InexSearcher
> 4) Go to step 2
> You'll get OutOfMemoryException after some time of running this algorithm.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.