#c# #wpf
#c# #wpf
Вопрос:
Я должен показать все 365 дней в дневнике событий (это должно быть 365 дней, у меня нет выбора).
Изначально приложение было в winforms, в нем было 12 DataGridView, по одному на каждый месяц, с одной маленькой текстовой строкой на каждый день до 31 строки. Нам (только что) удалось вывести все это на экран (это было сделано в двух строках, т. е. с января по июнь в топ-6 DGV, с июля по декабрь в топ-6 DGV).
Мне нужно перенести проект на WPF.
Мой вопрос касается скорости, версия winforms была не слишком быстрой, мне интересно, какой наилучший подход к макету и БД для этого приложения, т. е. дополнительная информация —
- В качестве базы данных diary используется T-SQL
- Не во все дни есть что отображать (т. Е. нет прямой привязки для текста day-> db day enrty)
- Записи базы данных содержат дату и описание события (описание — это то, что мне нужно отобразить)
- Типичный дневник содержит около 150 записей для отображения
Приветствуется любая помощь
Ответ №1:
На самом деле не могу вам сильно помочь со стороны макета, однако мне потребовалось реализовать что-то очень похожее в silverlight, и это решение, которое я использовал, сработало довольно хорошо.
1. Внедрите изолированное хранилище на стороне приложения, оно используется в качестве кэша дневника
2. На стороне базы данных вы должны хранить данные в виде типа данных XML
3. Когда пользователь входит в систему, немедленно отобразите содержимое кэша дневника, чтобы не было ожидания
4. Далее немедленно запустите фонового рабочего, который связывается с базой данных и получает последнюю актуальную информацию о дневнике
5. После завершения фоновой работы проверьте, отличаются ли данные за какой-либо день из базы данных от данных, хранящихся в локальном кэше, если да, обновите графический интерфейс и локальный кэш
6. Запускайте фоновый рабочий процесс каждые 5 минут, следуя шагам 4 и 5 по мере необходимости
Комментарии:
1. Некоторые хорошие моменты, особенно 4 и 5, действительно ценят вклад. Что касается скорости, то, по-видимому, лучше всего использовать ObservableCollection<T>, что я и сделал, я также воспользовался вашим предложением использовать BackgroundWorker для его периодического обновления. Что касается макета, я понятия не имею, поэтому я просто придерживаюсь стандартного шаблона данных в ListView (по одному на каждый месяц, поскольку я считаю, что это лучше — т. Е. Привязка ко многим объектам с меньшим количеством свойств, как описано в msdn.microsoft.com/en-us/library/bb613546.aspx )