Combobox Dropdown Caching - PullRequest
       11

Combobox Dropdown Caching

4 голосов
/ 19 мая 2009

У нас есть приложение VB.Net, которое насчитывает около 80 уникальных ComboBox, распределенных по 15 окнам. В настоящее время, когда окно загружено, ComboBox извлекает свое содержимое непосредственно из базы данных SQL.

Это довольно неэффективно, так как содержимое ComboBox редко изменяется, поэтому имеет смысл извлечь все раскрывающиеся значения ComboBox один раз при первом запуске программы.

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

Ответы [ 4 ]

2 голосов
/ 19 мая 2009

Кэширование - это, безусловно, способ использовать Hashtable или что-то в этом роде. Если вы можете объединить все запросы в один запрос SQL, который возвращает несколько таблиц, и получить все за один вызов.

1 голос
/ 19 мая 2009

Это очень похоже на то, что требуется в приложении, которое я разрабатываю. Я создал статический класс со статическими DataTables для каждого поля со списком. Когда приложение загружается, оно заполняет все таблицы статических данных.

Пример:

static public class GlobalDropdownData
    {
        static private DateTime Combo1Table;

        static private DataTable Combo1Table;

        static private DataTable Combo1Table;
 }

Vb.net будет что-то вроде:

Public Class GlobalDropDownData
    Shared Combo1DT As DataTable
    Shared Combo2DT As DataTable
    Shared Combo3DT As DataTable
End Class
1 голос
/ 19 мая 2009

Может сериализовать данные в XML-файл, который вы загружаете при запуске и заполняете поля со списком. Затем вы можете добавить таблицу в вашу базу данных с одним значением - последней датой обновления вашей базы данных, и, если это после текущей даты, запустите запросы к базе данных, чтобы заполнить поля со списками, а затем обновите файл xml.

0 голосов
/ 19 мая 2009

Да, вы можете загрузить все данные поиска при запуске приложения, в одном вызове, возвращающем несколько наборов результатов. Приложение Winforms, которое я унаследовал, делало именно это, но компромисс заключался в том, что время запуска было ужасно медленным, поскольку вызов веб-службы, который выполнялся для извлечения данных поиска из базы данных для возврата всех кэшированных наборов результатов, занял несколько секунд, чтобы выполнить. Если это проблема, вы можете запустить асинхронный вызов базы данных / веб-службы, чтобы в процессе выполнения кода базы данных можно было выполнить больше действий по инициализации. Если вам необходимо убедиться, что данные были возвращены до того, как пользователь выполнит определенную задачу, такую ​​как нажатие кнопки для отображения экрана с одним или несколькими выпадающими списками, требующими кэширования данных, использование одного или нескольких таймеров Winforms может помочь также.

Еще одним вариантом повышения производительности может быть выполнение вызова доступа к данным в отдельном потоке, хотя в проекте, над которым я работал, я нашел другие варианты, достаточные для сокращения времени запуска с примерно 10 секунд до менее 3 секунд без приходится иметь дело со сложностями многопоточности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...