проблема довольно проста: В основном мой вид должен отображать данные, поступающие из службы WCF. Данные обновляются асинхронно с высокой частотой, поэтому графический интерфейс должен быть соответствующим образом обновлен при изменении данных на стороне сервера.Дизайн MVVM для приложения реального времени
В представлении отображается много данных, поэтому в основном это привязывает поля 50/60, выставленные в ViewModel.
Модельная часть - это в основном объект POCO, который содержит поля 50/60, отображаемые в графическом интерфейсе. Да, ViewModel подвергает объект Model объекту View. (Обратите внимание, что объект Model реализует INotifyPropertyChanged, чтобы уведомить View, когда изменилось значение свойства.)
Теперь я написал слой «DataService», который взаимодействует с сервисом WCF и отвечает за обновление модели в соответствии с к данным, возвращаемым службой WCF. Когда данные обновляются на стороне сервера, служба WCF по причинам производительности возвращает клиенту только набор полей, которые изменены.
Так, в DataService есть обработчик событий, который управляет обновления службы WCF, как следующее:
void OnServiceUpdated(UpdateArgs args)
{
foreach(Field field in args.ChangedFields)
{
if(field.Key == "BetName") _modelBet.BetName = field.Value;
else if(field.Key == "BetUser") _modelBet.BetUser = field.Value;
[...]
//the same for 50 fields...
}
}
Теперь этот ужасный код, который обновляют модель необходима, потому что мы хотим обновить только те поля, модели, которые не изменены на стороне сервера. (Обратите внимание, что API-интерфейс службы wcf не может быть изменен).
Мой вопрос: Что вы предлагаете, чтобы улучшить производительность обработчика OnServiceUpdated?
Спасибо заранее, Jhon
Привет, Давут, большое спасибо за ваш ответ. Хорошо, спасибо за предложение Dispatcher TImer, но частые обновления в пользовательском интерфейсе не являются проблемой в этом случае. – user1070316
Привет, Давут, большое спасибо за ваш ответ. Хорошо, спасибо за предложение диспетчера TImer, но частые обновления в пользовательском интерфейсе не являются проблемой в этом случае. Кстати, я буду рассматривать эту проблему отдельно. Да, я уже придумал решение, которое вы предложили, поэтому, используя отражение для того, чтобы свойства свойства transer отображали свойстваModel, но по соображениям производительности я бы хотел избежать использования отражения. Очень интересно ваше предложение об Auto-Mapper. Я попытаюсь разобраться в этом направлении. Thanks, John – user1070316
Некоторые люди говорят, что этот метод http://stackoverflow.com/a/8111631/413032 работает быстрее, чем отражение. Кроме того, я не думаю, что размышление вызывает проблемы. Связывание использует отражение и 1000 объектов Textblock в элементе управления, привязанных к 1 секунде http://msdn.microsoft.com/en-us/library/bb613546.aspx (время рендеринга 1.2sn). Уверены, что вы свободны от использования автомакетов http://www.codeproject.com/Articles/61629/AutoMapper. Это действительно зависит от вашей проблемы. –