Все я в настольном приложении, будь то Winforms или WPF, я стараюсь делать в фоновом потоке. Это делается по двум причинам. Во-первых, лучше работать с пользователем. Во-вторых, при тестировании WPF я обнаружил, что это лучший исполнитель при загрузке большого количества данных, таких как записи в сетку или список.
Загрузка данных авансом против ленивой загрузки действительно является индивидуальной настройкой для каждого приложения. Я бы построил центральный объект данных, который обрабатывает оба сценария. Способ, которым я мог бы порекомендовать это, - создать модель зависимостей, зависящую от событий. Я имею в виду, что вы можете поместить функцию регистрации событий или обратного вызова на объект диспетчера данных, который подписываются различными единицами кода, когда им нужно использовать данные, а затем они возвращаются, когда данные доступны. Если данные уже доступны, то обратный вызов происходит немедленно. Иначе код кода вызывается назад, когда данные загружаются из фонового потока.Например, в каком-то окне или компоненте вы можете иметь некоторый код, который выглядит следующим образом:
DataManager.LoadDataAsync(dataCommandPatternObject, CallBackFunction);
...
public void CallbackFunction(SomeDataObjectClass data)
{
//load data into UI
}
Если загрузка данных осуществляются через центральный механизм затем, если одни и те же данные запрашиваются дважды, версия кэша может быть использована или второй запрос может дождаться, если первый запрос все еще запущен.
Если данные необходимо загружать спереди, экран загрузки (заставки) может запрашивать несколько фрагментов данных и когда каждый блок данных загружает обратный вызов. Когда все обратные вызовы активируются, экран заставки существует.
Это всего лишь несколько моментов из нескольких техник, которые я использовал на протяжении многих лет для управления загрузкой больших наборов данных в основном статических/поисковых данных. Помимо всего этого, я бы также рекомендовал какое-то кэширование на стороне клиента для очень больших наборов данных, которые редко меняются, и реализуют какое-то отслеживание изменений в базе данных. Это позволит загружать эти данные с локального диска клиентом, что быстрее, чем переход к БД. Он также позволяет шкале БД лучше, поскольку он не обслуживает данные, которые сильно повторяются, и вместо этого он может сосредоточиться на транзакционных данных.
Хороший ответ! Я согласен и собираюсь опубликовать это, пока вы не избили меня до этого! – BobbyShaftoe 2008-12-13 03:34:32