powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF оптимизация кода для отображения данных
13 сообщений из 13, страница 1 из 1
WPF оптимизация кода для отображения данных
    #36885649
testing22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача: на входе 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
WPF оптимизация кода для отображения данных
    #36885750
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
testing22, а выборку сразу в коллекцию нельзя сделать?
...
Рейтинг: 0 / 0
WPF оптимизация кода для отображения данных
    #36885775
testing22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Proga, выкинуть lst? У меня не получилось
...
Рейтинг: 0 / 0
WPF оптимизация кода для отображения данных
    #36885845
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
WPF оптимизация кода для отображения данных
    #36885856
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант,можно забацать класс с наследованием IList и INotifyPropertyChanged. Работать должно быстрее.
...
Рейтинг: 0 / 0
WPF оптимизация кода для отображения данных
    #36885910
testing22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Proga, код из хелпа - имеешь в виду заполнять мой ObservableCollection в конструкторе?
...
Рейтинг: 0 / 0
WPF оптимизация кода для отображения данных
    #36891983
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
testing22,

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

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

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

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

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

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

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

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

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

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

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

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


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