В настоящее время я работаю над приложением Silverlight 4.0, которое отображает около 13 000 строк в элементе управления DataGrid.Один элемент содержит около 40 строковых свойств и одно целочисленное.
На странице, содержащей эту сетку, находится панель, на которой пользователь может устанавливать различные веса.После нажатия кнопки «Обновить» Silverlight должен выполнить некоторые вычисления в зависимости от этих настроек.
Во время расчета интенсивно (и необходимо) использовать отражение для получения значений свойств String.Наконец, в результате вычисляется оценка и записывается в целочисленное поле.Это необходимо сделать для каждого из 13 000 объектов.
В настоящее время в качестве временного решения я использую экземпляр BackgroundWorker
и диспетчер гридов (чтобы войти в поток пользовательского интерфейса и получить доступ к нему).свойство ItemsSource в Grid), выполните итерацию по каждому элементу и рассчитайте оценку.Этот процесс занимает около 3 минут и это слишком долго, так как пользователь не хочет ждать более нескольких секунд.К сожалению, PLinq & Co не включены в Silverlight 4, и даже моя попытка реализовать многопоточное решение для этого не удалась, потому что мне нужно вернуться к потоку пользовательского интерфейса (-> Dispatcher), чтобы обновить каждый элемент (который реализует INotifyPropertyChanged
)который направляется в Grid) и для доступа к ItemsSource.Таким образом, даже при использовании полупараллельного решения оно не очень быстрое из-за зависимости от потока пользовательского интерфейса.
Дополнительно к простому отображению данных пользователь должен иметь возможность фильтровать данные, которые не поддерживаются.по умолчанию.Поэтому я создал класс, похожий на этот , который реализует интерфейс ICollectionView
.
У вас есть идея или предложение, что я мог бы попробовать?
Заранее спасибо!