1) if (this.PropertyIsChanged != null) { this.PropertyIsChanged.Invoke(); — это кусок кода обязательно необходим, поскольку в противном случае, можно нарваться на nullReference-исключение.
И в этом случае тоже может быть null ref, потому что после проверки последний подписчик может отписаться от события.
Вы не правильно поняли.
Это логическое продолжение Durandal написанное на ES6 и ES7 и использующее их фичи, собранное под «evergreen» браузеры. Так же они выкинули Knockout и написали свои байндинги, на подобии тех, что есть в Angular (используются Object.observe и Array.observe, если доступны, иначе dirty checking).
Я понимаю что у вас есть некие потребности. У меня, например, таковых нет.
Этот фреймворк можно рассматривать как WPF для веб. MVVM, Two way binding, Value converters. Вот это всё.
Мне, например, кажется странным желание рендерить XAML на сервере.
Тут решаются другие задачи. Люди пытаются довести разработку веб приложений до уровня разработки десктопных приложений.
Их цель, имхо, это enterprise, с кучей CRUD и горой кода.
Это часть запроса. Сгенерируется sql, который вытащит первую из уникальных строчек.
В общем, я бы аггрегировал информацию в базе и вытаскивал уже готовые уникальные значения.
А просто Distinct() не работает? На сколько я понимаю, EF реализует Identity Map, так что каждая сущность загрузится только один раз (с одним Primary Key) и стандартный EqualityComparer, который сравнивает референсы, должен сделать свою работу.
Если не работает или Вам нужен Distinct по проекциям, то можно попробовать вот такие методы:
Вызовите AsNoTracking() на датасете (если Вам не нужно кеширование\трекание изменений) и получите еще прибавку в производительности: по моим подсчетам раза в 2-3 (на 10к сущностей).
Конечно, TPL DataFlow пригодится там, где процесс выглядит куда сложнее. Это простой пример, но он показывает, как, не напрягаясь, ограничить использование памяти, нагрузить процессор и легко синхронизировать обработанные данные.
Вы уже второй, кто говорит, что без этого было бы проще. Я бы с радостью посмотрел на простое решение с использованием async\await.
В этом примере тоже можно добавить async\await, чтобы не занимать даже один поток на чтение\запись.
Присоединяюсь к тем, кто считает, что валидировать надо данные, а не контролы. Тут лежит старый проект Jeremy Miller (автор StructureMap), который позволяет валидировать данные используя атрибуты и кастомный интерфейс. Как получить из этого помидоры на контролах — другой вопрос, который, впрочем, тоже решается решением, частью которого является эта валидация (тут).
Проблема в том, что не понятно сколько они там будут висеть.
Посмотрите Алгоритмы кэширования. Скорее всего под Вашу задачу что-нибудь подойдёт. LRU или еще чего.
Я не о тех евентах о которых Вы. О типизированных. У нас же С#.
Например:
public class UserSelected
{
private readonly int userId;
public UserSelected(int userId)
{
this.userId = userId;
}
public int UserId
{
get
{
return this.userId;
}
}
}
Вы видимо не прочитали что из себя представляет паттерн Event Aggregator.
Да, можно и без него.
Тут немного по теме: http://codeblog.jonskeet.uk/2015/01/30/clean-event-handlers-invocation-with-c-6/
И в этом случае тоже может быть null ref, потому что после проверки последний подписчик может отписаться от события.
Поэтому правильней делать так:
Это логическое продолжение Durandal написанное на ES6 и ES7 и использующее их фичи, собранное под «evergreen» браузеры. Так же они выкинули Knockout и написали свои байндинги, на подобии тех, что есть в Angular (используются Object.observe и Array.observe, если доступны, иначе dirty checking).
Этот фреймворк можно рассматривать как WPF для веб. MVVM, Two way binding, Value converters. Вот это всё.
Мне, например, кажется странным желание рендерить XAML на сервере.
Тут решаются другие задачи. Люди пытаются довести разработку веб приложений до уровня разработки десктопных приложений.
Их цель, имхо, это enterprise, с кучей CRUD и горой кода.
В общем, я бы аггрегировал информацию в базе и вытаскивал уже готовые уникальные значения.
Distinct()
не работает? На сколько я понимаю, EF реализует Identity Map, так что каждая сущность загрузится только один раз (с одним Primary Key) и стандартный EqualityComparer, который сравнивает референсы, должен сделать свою работу.Если не работает или Вам нужен Distinct по проекциям, то можно попробовать вот такие методы:
AsNoTracking()
на датасете (если Вам не нужно кеширование\трекание изменений) и получите еще прибавку в производительности: по моим подсчетам раза в 2-3 (на 10к сущностей).Вы уже второй, кто говорит, что без этого было бы проще. Я бы с радостью посмотрел на простое решение с использованием async\await.
В этом примере тоже можно добавить async\await, чтобы не занимать даже один поток на чтение\запись.
Проблема в том, что не понятно сколько они там будут висеть.
Посмотрите Алгоритмы кэширования. Скорее всего под Вашу задачу что-нибудь подойдёт. LRU или еще чего.
Пока вы в UpgradeableReadLock никто ничего не запишет
Например:
Вы видимо не прочитали что из себя представляет паттерн Event Aggregator.