2009-02-07 2 views
0

У меня есть большой список статических данных с сервера, который я загружаю при запуске. Я загружаю это в хэш-таблицу объектов foo. у пользователя есть выпадающий список, где они могут выбрать один из этих объектов. по умолчанию 50 000 объектов занимают много памяти. я пытаюсь уменьшить памятьСтратегия кэширования

после мониторинга использования, выясняется, что большинство людей используют только около 1000 из них. я хочу, чтобы это было так, что gui загружает только эти 1000, и если им нужно выбрать тот, который находится за пределами 1000, тогда они могут вернуться на сервер или на диск.

что было бы лучшим способом сделать это. ,

+0

Это веб-приложение или winform? –

+0

никогда не видел, видел тэги. –

ответ

4

Я предполагаю, что вы фильтруете этот список в другом месте ... в противном случае это довольно список. Самый простой способ ударить новый компактнее статический кэш перед нажатием DB будет передавать все запросы через один метод:

public yourClass GetDesiredObject(string lkupValue) 
{ 
    if (yourCachedHashtable.ContainsKey(lkupValue)) 
    { 
    return yourCachedHashtable[lkupValue] 
    } 
    else 
    { 
    //Hit the db to retrieve the object values. 
    yourClass obj = yourDatabaseCode.GetNewObject(lkupValue); 
    //Add to the cache if desired. 
    yourCachedHashtable.Add(lkupValue, obj); 
    return obj; 
    } 
} 
1

У вас есть выпадающее меню с 50000 элементами? Это кажется чересчур излишним. Возможно, контроль списка? Кроме того, вы можете создать список как представление виртуального списка - в этом режиме он будет загружать элементы только по мере необходимости, другие элементы могут быть загружены, если они будут прокручиваться в представлении. Поскольку у вас столько элементов в представлении списка, я предлагаю вам работать над каким-то контролем поиска, который пользователь может использовать для сужения списка элементов.

0

В зависимости от характера ваших данных, как забыть обо всем этом и оставить его в ОС? Поместите его в файл с отображением памяти.

4

Проблема с загрузкой 1000 первыми является

  1. Кто бы прокрутите 1000?

  2. Возвращение на диск приведет к сбросу выпадающего меню, и им придется прокручивать снова.

Решение

  1. Почему бы не реализовать автоматический поиск выпадающего меню, и попробовать кэширование приложений блока, он отлично работает для меня с обширными объемами данных.

  2. Посмотрите на раскрывающееся меню devexpress, вам нужно будет приобрести их элементы управления.

+0

Я согласен с этим решением, позволяющим выполнять частичный поиск, набрав первые несколько букв, безусловно, является оптимальным решением для списка так долго. –

1

50 000 объектов для выпадающего меню кажется немного излишним. Возможно, вы хотите посмотреть на альтернативный виджет, например, на таблицу с пейджингом ...

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