2009-12-11 3 views
1

Мы только что столкнулись с этой ошибкой в ​​нашем веб-приложении и сразу нашли статью здесь Hashtable insert failed. Load factor too high. - ASP.NET 2.0.Ошибка HashTable. Слишком высокий коэффициент нагрузки. .NET 2.0 SP2

Однако исправление, которое указывает на (http://support.microsoft.com/?id=927579), уже включено в .NET 2.0 SP1 (http://support.microsoft.com/kb/945757).

Перезапуск службы публикации WWW заставил его уйти. Кто-нибудь знает о каких-либо других действительных условиях, когда это может произойти? И как убедиться, что этого не произойдет?

Спасибо.

Редактировать: Я считаю, что это также может быть связано с другой проблемой, которую мы имеем с объектом Dictionary, хранящимся в области приложения. Я изменил код, чтобы использовать Application.Lock()/Unlock() вокруг записи в словарь, поэтому мы увидим, если это произойдет после того, как эти изменения будут выпущены.

Больше никаких указателей, которые могли бы дать по возможным причинам, кроме простой ошибки в каркасе, были бы чрезвычайно вознаграждены похвалой и лестью!

+0

Возможно ли, что у Hashtable, который вы используете, действительно есть фактор нагрузки, который слишком высок? Возможно, вам нужно улучшить свою хэш-функцию, чтобы она была более уникальной, уменьшая вероятность столкновений. –

+0

Может быть ... В этом случае я полагаю, что мой вопрос больше касается того, что именно может вызвать это исключение! Все связанные с ней поисковые запросы Google указывают на ошибки Framework и, как правило, заканчиваются указанным выше исправлением, но большинство статей, которые я нашел, - 2007 и ранее. – Town

+0

Если у вас есть хеш-таблица из нескольких миллионов или более записей, я не могу понять, как это может произойти. В этом случае вы действительно должны использовать DB ... – leppie

ответ

0

Для справки, есть исправление для 2.0 SP2 и 3.5 SP1, которые могут решить эту проблему: http://code.msdn.microsoft.com/KB968432

Я хотел бы добавить, что первая проблема, как представляется, были решены путем включения Application.Lock()/разблокировка(), как упоминалось в моем оригинальном посте (это сложно проверить, хотя это абсолютно случайно!). Последовательная ошибка «Hashtable insert failed» произошла в ReflectGetAttributes() в соответствии с этой статьей, и это исправление предназначено для адресации.

Смежные вопросы