Странное исключение NullReferenceException из метода J2N HashSet AddInNotPresent, вызываемое Lucene.NetC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Странное исключение NullReferenceException из метода J2N HashSet AddInNotPresent, вызываемое Lucene.Net

Сообщение Anonymous »


Я публикую часть трассировки стека. Это исключение случается нерегулярно, и его трудно воспроизвести. Но обычно это происходит после выхода из простоя процесса IIS. (Сначала запустите его, некоторое время ничего не делайте, затем откройте страницу, которая как-то связана с поиском Lucene.Net). Я не очень разбираюсь в IIS. Будет очень полезно, если кто-нибудь поможет мне решить эту проблему~. Спасибо

Исключение: System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта. в J2N.Collections.Generic.HashSet`1.AddIfNotPresent (значение T) в Lucene.Net.Index.IndexReader.SubscribeToGetCacheKeysEvent(GetCacheKeysEvent getCacheKeysEvent) в Lucene.Net.Search.FieldCacheImpl.Cache`2.Get (читатель AtomicReader, ключ TKey, логическое значение setDocsWithField) в Lucene.Net.Search.FieldCacheImpl.GetInt64s (читатель AtomicReader, строковое поле, парсер IInt64Parser, логический setDocsWithField) в Lucene.Net.Search.FieldComparer.Int64Comparer.SetNextReader (контекст AtomicReaderContext) в Lucene.Net.Search.TopFieldCollector.OneComparerNonScoringCollector.SetNextReader (контекст AtomicReaderContext) в Lucene.Net.Search.IndexSearcher.Search(листья IList`1, вес веса, сборщик ICollector) Я сомневаюсь, что мне следует увеличивать время простоя пула приложений, чтобы снизить частоту его возникновения. https://catchsoftware.com/knowledge-bas ... -timeouts/

Я проверяю метод AddIfNotPresent, но понятия не имею, какая ссылка может быть нулевой во время выполнения. Даже я знаю, где она находится, но не могу изменить ее, поскольку это библиотека.
private bool AddIfNotPresent (значение T) { если (_buckets == ноль) { Инициализировать(0); } интервал хэш-кода; целое ведро; Интервал коллизийCount = 0; Слот[] slots = _slots; IEqualityComparer? компаратор = _компарер; если (компаратор == ноль) { хэш-код = значение == ноль? 0: InternalGetHashCode(value.GetHashCode()); ведро = hashCode% _buckets!.Length; if (default(T)! != null) // TODO-NULLABLE: default(T) == нулевое предупреждение (https://github.com/dotnet/roslyn/issues/34757) { for (int i = _buckets[bucket] - 1; i >= 0; i = slots.next) { if (slots.hashCode == hashCode && EqualityComparer.Default.Equals(slots.value, value)) { вернуть ложь; } если (collisionCount >= slots.Length) { // Цепочка записей образует цикл, что означает, что произошло одновременное обновление. выдать новое InvalidOperationException(SR.InvalidOperation_ConcurrentOperationsNotSupported); } столкновениеCount++; } } еще { // Тип объекта: Shared Generic, EqualityComparer.Default не девиртуализируется // https://github.com/dotnet/coreclr/issues/17273 // Поэтому кэшируем локально, а не получаем EqualityComparer на каждой итерации цикла IEqualityComparer defaultComparer = EqualityComparer.Default; for (int i = _buckets[bucket] - 1; i >= 0; i = slots.next) { if (slots.hashCode == hashCode && defaultComparer.Equals(slots.value, value)) { вернуть ложь; } если (collisionCount >= slots.Length) { // Цепочка записей образует цикл, что означает, что произошло одновременное обновление. выдать новое InvalidOperationException(SR.InvalidOperation_ConcurrentOperationsNotSupported); } столкновениеCount++; } } } еще { хэш-код = значение == ноль? 0: InternalGetHashCode(компаратор.GetHashCode(значение)); ведро = hashCode% _buckets!.Length; for (int i = _buckets[bucket] - 1; i >= 0; i = slots.next) { if (slots.hashCode == hashCode && Comparer.Equals(slots.value, value)) { вернуть ложь; } если (collisionCount >= slots.Length) { // Цепочка записей образует цикл, что означает, что произошло одновременное обновление. выдать новое InvalidOperationException(SR.InvalidOperation_ConcurrentOperationsNotSupported); } столкновениеCount++; } } внутренний индекс; если (_freeList >= 0) { индекс = _freeList; _freeList = слоты[индекс].next; } еще { если (_lastIndex == slots.Length) { УвеличениеЕмкости(); // это изменится при изменении размера слоты = _slots; ведро = hashCode% _buckets.Length; } индекс = _lastIndex; _lastIndex++; } слоты[индекс].hashCode = hashCode; слоты[индекс].значение = значение; slots[index].next = _buckets[ведро] - 1; _buckets[ведро] = индекс + 1; _счет++; _версия++; вернуть истину; }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему HashSet намного медленнее, чем HashSet?
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Почему HashSet намного медленнее, чем HashSet?
    Anonymous » » в форуме C#
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Разница в полнотекстовом поиске в Lucene 2.4 и Lucene 3.1
    Anonymous » » в форуме JAVA
    0 Ответы
    130 Просмотры
    Последнее сообщение Anonymous
  • Нужны исходные файлы Lucene 4.1.0 или файлы javadoc (чтобы можно было разрабатывать с помощью Lucene 4.1.0 в Eclipse)
    Anonymous » » в форуме JAVA
    0 Ответы
    94 Просмотры
    Последнее сообщение Anonymous
  • Лексическая ошибка при использовании lucene 9, но lucene 2 работает
    Anonymous » » в форуме JAVA
    0 Ответы
    106 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»