Самое очевидное, что вы можете сделать, - это профилировать свое приложение и найти узкие места во время запуска. Похоже, что наиболее вероятной причиной будет загрузка данных из вашей базы данных.
Один урок, который я усвоил, заключается в том, что если вы используете ORM, при загрузке больших наборов данных, если вы предпочитаете POCO (простые старые объекты CLR / C #) над сгенерированными ORM объектами базы данных (см. Пример ниже), время загрузки будет намного быстрее, и использование оперативной памяти будет значительно уменьшено. Причина этого заключается в том, что EF попытается загрузить всю сущность (то есть все ее поля) и, возможно, всю загрузку данных, связанных с вашими сущностями, большинство из которых вам даже не понадобятся. Единственный раз, когда вам действительно нужно работать напрямую с сущностями, это когда вы выполняете операции вставки / обновления / удаления. При чтении данных вы должны только получать поля, которые ваше приложение должно отображать и / или проверять.
Если вы следуете шаблону MVVM, описанную выше архитектуру несложно реализовать.
Пример загрузки данных в POCO с EF:
var query = from entity in context.Entities
select new EntityPoco
{
ID = entity.ID,
Name = entity.Name
};
return query.ToList();
POCO - это очень простые классы с автоматическими свойствами для каждого поля.
У нас обычно есть репозитории для каждого объекта в наших приложениях, и каждый репозиторий отвечает за получение / обновление данных, связанных с этим объектом. Модели представлений имеют ссылки на нужные им репозитории, поэтому они не используют EF напрямую. Когда пользователи вносят изменения, которые необходимо сохранить, мы используем другие методы в хранилище, которые затем загружают только подмножество сущностей (то есть те, которые изменил пользователь) и применяют необходимые обновления - с некоторой проверкой, выполненной моделью представления, и, возможно, другой проверкой происходит в БД через ограничения / триггеры и т. д.