Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF оптимизация кода для отображения данных / 13 сообщений из 13, страница 1 из 1
06.10.2010, 21:20
    #36885649
testing22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF оптимизация кода для отображения данных
Задача: на входе dataTable, на выходе ObservableCollection

Делаю так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
obc = new ObservableCollection<DataRow>

 List<DataRow> lst = (from t in dataTable.AsEnumerable() 
   where t.Field<string>("Comment") == "One"
   select t).ToList(); 

lst.ForEach(x => obc.Add(x)); 

Можно ли сделать оптимальнее и быстрее? Нужна очень быстрая отрисовка.
...
Рейтинг: 0 / 0
06.10.2010, 22:13
    #36885750
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF оптимизация кода для отображения данных
testing22, а выборку сразу в коллекцию нельзя сделать?
...
Рейтинг: 0 / 0
06.10.2010, 22:24
    #36885775
testing22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF оптимизация кода для отображения данных
Proga, выкинуть lst? У меня не получилось
...
Рейтинг: 0 / 0
06.10.2010, 23:03
    #36885845
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF оптимизация кода для отображения данных
testing22Proga, выкинуть lst? У меня не получилось
Сервер, что не доступен?

Выдержка из хелпа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
public class NameList : ObservableCollection<PersonName>
{
    public NameList() : base()
    {
        Add(new PersonName("Willa", "Cather"));
        Add(new PersonName("Isak", "Dinesen"));
        Add(new PersonName("Victor", "Hugo"));
        Add(new PersonName("Jules", "Verne"));
    }
  }

  public class PersonName
  {
      private string firstName;
      private string lastName;

      public PersonName(string first, string last)
      {
          this.firstName = first;
          this.lastName = last;
      }

      public string FirstName
      {
          get { return firstName; }
          set { firstName = value; }
      }

      public string LastName
      {
          get { return lastName; }
          set { lastName = value; }
      }
  }

Поля объектов заполняй ридером в классе-менеджере.
можно и ORM прикрутить.
...
Рейтинг: 0 / 0
06.10.2010, 23:14
    #36885856
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF оптимизация кода для отображения данных
Как вариант,можно забацать класс с наследованием IList и INotifyPropertyChanged. Работать должно быстрее.
...
Рейтинг: 0 / 0
06.10.2010, 23:55
    #36885910
testing22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF оптимизация кода для отображения данных
Proga, код из хелпа - имеешь в виду заполнять мой ObservableCollection в конструкторе?
...
Рейтинг: 0 / 0
11.10.2010, 10:22
    #36891983
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF оптимизация кода для отображения данных
testing22,

ты ведь если пораскинуть мозгами, хочешь,чтобы скорость прихода данных по каналу связи, не увеличивалась за счет этапа отображения.

это походу просто эго твое не дает тебе покоя :)

ты поставь на формочку таймер с надписью "Следующие обновление через 00:01:00" ,который ведет обратный отсчет.
когда пользователь будет это видеть, то все будет хорошо, и он не будетг оворить, дайте быстрее.
и если тебе удается сделать это, то у тебя есть целая минута,чтобы в отдельном потоке подготовить данные и незаметно обновить.
также потом можешь сделать историю,чтобы юзер,мог посмотреть историю данных.
...
Рейтинг: 0 / 0
15.10.2010, 11:11
    #36900884
testing22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF оптимизация кода для отображения данных
AlexeiK,

Да понимаешь, тут дело даже не столько в скорости уже, а в том, что отрисовка одного небольшого грида (5*50) приведенным способом приводит к существенной загрузке проца, и она связана чисто с отрисовкой. Без отрисовки 2%, с отрисовкой 15-25%. Данные обновляются часто, но переходить на таймер не хочется, хочу до обновлять при поступлении, компы-то сейчас ого-го. Вот и пытался тут уточнить, в основном мне не давала покоя ObservableCollection.

Пока вот подсказали это http://peteohanlon.wordpress.com/2008/10/22/bulk-loading-in-observablecollection/, но на-глазок изменений в нагрузке на проц почему-то не заметил...
...
Рейтинг: 0 / 0
15.10.2010, 11:58
    #36901040
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF оптимизация кода для отображения данных
testing22,

а цель то какая сейчас?
...
Рейтинг: 0 / 0
15.10.2010, 12:57
    #36901242
testing22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF оптимизация кода для отображения данных
AlexeiK,

Сейчас работает приемлемо, но пытаюсь к минимуму затраты на отрисовку:
1.времени
2.ресурсов процессора

Сразу было подозрение, что поэлементное добавление в ObservableCollection дает увеличенную нагрузку, но вариант с подавлением OnCollectionChanged во время добавления элементов, почему-то не привел к ее уменьшению.

Из вариантов вижу:
1. сделать по таймеру
2. сравнивать пришедшую таблицу с уже существующей и отображенной, и перерисовывать только изменившиеся ячейки
3. написать свой контрол с нуля (пока использую датагрид)
...
Рейтинг: 0 / 0
15.10.2010, 13:29
    #36901347
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF оптимизация кода для отображения данных
testing22,

если тебе надо просто отобразить в виде грида,то быстрее и проще сделать свой контрол.
рисовать на wpf просто.
...
Рейтинг: 0 / 0
15.10.2010, 17:56
    #36902201
testing22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF оптимизация кода для отображения данных
AlexeiK,

Не уверен, что самодельный контрол будет быстрее списка или грида...
...
Рейтинг: 0 / 0
15.10.2010, 18:53
    #36902326
WM_PAINT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF оптимизация кода для отображения данных
testing22Не уверен, что самодельный контрол будет быстрее списка или грида...
А грид/лист инопланетянами написан?

Какая разница где рисовать - WPF, GDI(+),DIRECT3D,OPENGL - объектную модель сверх необходимого наворачивать не стоит, чем страдают разнообразные коммерческие и некоммерческие гриды.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF оптимизация кода для отображения данных / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]