Приложение Silverlight 4 с использованием WCF RIA Services
У меня есть страница с ComboBox и TabControl. Каждый TabItem имеет пользовательский элемент управления, который отображает элемент управления RAD Chart. Поле со списком содержит элементы, которые используются для фильтрации данных, которые пользовательские элементы управления отображают на диаграммах. Когда выбор ComboBox изменяется, страница обновляет набор сущностей, хранящихся в свойстве класса экземпляра/одиночки. Пользовательские элементы управления уведомляются об изменении и получают доступ к обновленной коллекции сущностей, чтобы передать элементу управления диаграммы. Все работает. Когда выбор ComboBox изменяется, пользовательские элементы управления отображают подмножество данных, выбранных на основе выбранного элемента ComboBox.
Что меня смутило, так это время, необходимое для перебора коллекции сущностей при подготовке значений, которые передаются в элемент управления диаграммой. На диаграмме отображаются данные за 12 месяцев, поэтому я итерирую коллекцию 12 раз и использую запрос LINQ, чтобы получить сумму свойств объектов в коллекции. Я выделил проблему производительности для одного запроса LINQ, который выполняет Sum:
Decimal sum = myCollection.Where(m => m.CreationDate.Month == month).Sum(m => (m.SalePrice ?? 0));
Эта единственная строка кода иногда может выполняться больше секунды. Это не ужасно, но я итерирую 12 месяцев, так что эта строка кода запускается 12 раз.
Вот это кикер...
Верхняя опция ComboBox — «все записи». Итак, в моем тестовом примере при первом использовании приведенной выше строки кода для получения «Суммы» коллекция содержит более 500 записей. Он возвращает сумму за 0,2 секунды. Я изменяю ComboBox на выбор, который фильтрует результаты, поэтому в коллекции будет только 80 записей. Имейте в виду, это не совсем другой набор записей, это просто подмножество из 500, которые соответствуют другим критериям. Приведенная выше строка кода выполняется за 1,2 секунды. Когда я запрашиваю сумму из 500+ записей, это занимает 0,2 секунды. Когда я запрашиваю сумму из 80 записей, это занимает 1,2 секунды.
Что может быть причиной этого?
Спасибо,