2010-09-22 2 views
7

Я думаю, что заголовок в значительной степени отражает мой вопрос, но немного фона следует:Почему BindingList (Of T) не имеет участника AddRange?

Когда у меня есть груз, он добавляет несколько тысяч (30 тыс. Нечетных) объектов в список привязки. Когда мое приложение загружается в первый раз, требуется несколько секунд (около 10 или около того из памяти), чтобы он перебирал список объектов и добавлял их в BindingSource с помощью функции добавления. Однако, когда это происходит в последующих формах с одним и тем же кодом для загрузки, это занимает всего секунду или два.

Итак, мои запросы будут такими:
1. Почему BindingList (Of T) не имеет участника AddRange?
2. Было ли начальное и последующее добавление быстрее с помощью функции AddRange?
3. Любые идеи, почему одна версия кода работает медленнее, чем идентичные версии?

Спасибо за любую помощь, которую вы могли бы предоставить.

+0

Загружается ли форма при загрузке приложения? Возможно, это причина медленности? –

+1

Ну, после долгого времени я наконец-то обнаружил (не уверен, что это единственная проблема) для DataGridView DefaultRowTemplate ContextMenuProperty. Когда этот параметр установлен, он добавляет значительное количество времени, когда я добавляю элементы в базовый BindingSource. – ChrisAU

+1

Для справки в будущем я столкнулся с этим http://msdn.microsoft.com/en-us/library/ha5xt0d9.aspx, используя «Эффективное использование ярлыков». Я усвоил этот урок. – ChrisAU

ответ

0

From the OP:

Ну после того, как много времени я, наконец, выследили (не уверен, если это единственный) вопрос к DataGridView DefaultRowTemplate ContextMenuProperty. Когда этот параметр установлен, он добавляет значительное количество времени, когда я добавляю элементы в базовый BindingSource.

Для справки в будущем я столкнулся с этим msdn.microsoft.com/en-us/library/ha5xt0d9.aspx, используя «Эффективное использование ярлыков». Я усвоил этот урок.

Ссылка на MSDN в приведенной выше статье рекомендует не использовать контекстное меню в каждой ячейке, особенно путем помещения контекстного меню в шаблон. Вместо этого пользователь должен либо создать единое контекстное меню для всего элемента управления, либо обработать событие CellContextMenuStripNeeded или RowContextMenuStripNeeded.

1

Я не уверен, почему нет метода AddRange. Вы можете легко написать свой собственный метод расширения:

/// <summary> 
    /// Adds all the data to a binding list 
    /// </summary> 
    public static void AddRange<T>(this BindingList<T> list, IEnumerable<T> data) 
    { 
     if (list == null || data == null) 
     { 
      return; 
     } 

     foreach (T t in data) 
     { 
      list.Add(t); 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^