При разработке приложения WPF
с услугой WCF
я понял, что иногда приложение работает очень медленно. Например, когда я вызываю метод из службы WCF
, которая возвращает список, для выполнения этого требуется слишком много времени. Вот код:Есть ли способ сделать работу wpf + wcf быстрее?
MVVM:
private ObservableCollection<tblStock> _Stocks;
public ObservableCollection<tblStock> Stocks
{
get
{
return _Stocks;
}
set
{
_Stocks = value;
OnPropertyChanged("Stocks");
}
}
private ObservableCollection<tblClient> _Clients;
public ObservableCollection<tblClient> Clients
{
get
{
return _Clients;
}
set
{
_Clients = value;
OnPropertyChanged("Clients");
}
}
Когда я открываю окно, есть два ComboBoxes, связанные с этими свойствами. Эти свойства получить набор в конструкторе моего зрения модели класса, как так:
Clients = new ObservableCollection<tblClient>(wcf.GetClients());
Stocks = new ObservableCollection<tblStock>(wcf.GetStocks());
занимает около 7 - 10 секунд, иногда, чтобы загрузить эти выпадающие списки, когда откроется окно. Я не понимаю, почему так много времени требуется, когда количество списков действительно мало: 2 и 8 элементов. Вот методы на ФОС службы:
List<tblClient> IService.GetClients()
{
context = new PanErpLiteEntities();
List<tblClient> cntnt = (from c in context.tblClients select c).ToList();
return cntnt;
}
Так что мой актуальный вопрос: каковы возможные причины замедления моего приложения? Я опубликовал этот вопрос, потому что мне было трудно найти ответ на google, когда есть миллионы причин, заставляющих приложение работать медленно, поэтому я нахожусь здесь для советов. Надеюсь, я сделал себе достаточно ясно.
Сколько времени требуется, чтобы получить данные по WCF? Я не знаком с WCF, но вы пробовали сделать свою привязку async? (в строке привязки IsAsync = True). – Alan
Профиль приложения.Сначала определите, работает ли служба wcf медленнее или ваши привязки. –
Возможно ли, что услуга не «развернулась»? Возможно, именно то, что вы видите, это время запуска службы. Попробуйте запустить приложение, а затем немедленно отключите его. Затем запустите его снова. Если он запускается намного быстрее во второй раз, эта длительная задержка, которую вы видите первоначально, является, скорее всего, временем запуска службы. –