С 8000 элементов я бы порекомендовал элемент управления, который заполняется и фильтруется по требованию (не для Page_Load), и не сохраняет все элементы в ViewState.
К сожалению, заполнение и фильтрация по требованию противоречат сохранению стиля DataSource и DataBinding. Осталось только попытаться использовать элемент управления с EnableViewState = "false" и минимизировать размер страницы всеми доступными способами, в первую очередь с помощью сжатия. В IIS включает динамическое сжатие . Я не думаю, что эти шаги помогут решить проблему с производительностью, но вы должны начать с анализа размера страницы с помощью YSlow или других инструментов. Например, если на странице есть необязательные элементы, такие как специальные пользовательские списки, убедитесь, что фактически заполнены только те, которые используются. У меня были ситуации, когда мне удавалось больше половины размера страницы, не заполняя неиспользуемые элементы управления и отключая ViewState для них. Установка Visible = "false" была недостаточной.
Что касается альтернатив, я использовал Telerik RadCombobox с аналогичным количеством предметов и проблемами с производительностью. Установка EnableViewState = "false" значительно улучшила скорость обратной передачи, но время загрузки все еще было неприемлемым. Помогло переключение на загрузка по требованию , но возникли новые проблемы с сохранением выбранного состояния без ViewState. Заполнение поля со списком по требованию означает, что привязка данных выполняется в событии ItemsRequested каждый раз, когда поле со списком открывается в пользовательском интерфейсе. Это примерно так же, как использование обычного TextBox с AutoCompleteExtender и метода страницы. Вы, вероятно, могли бы повторно использовать большую часть кода привязки данных времени Page_Load здесь.
В целом, у меня был лучший опыт с jQuery UI autocomplete и Ajax-запросами, но это потребовало бы более обширного редизайна.