lucenenet-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "TJ Kolev (JIRA)" <j...@apache.org>
Subject [jira] Commented: (LUCENENET-106) Lucene.NET (Revision: 603121) is leaking memory
Date Tue, 20 Jan 2009 20:58:59 GMT

    [ 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.


Mime
View raw message