Почему BindingList (Of T) не имеет члена AddRange? - PullRequest
7 голосов
/ 22 сентября 2010

Я думаю, что заголовок в значительной степени отражает мой вопрос, но следует немного предыстории:

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

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

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

Ответы [ 2 ]

1 голос
/ 10 ноября 2015

Я не уверен, почему метод 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);
        }
    }
0 голосов
/ 17 сентября 2013

Из ОП :

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

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

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

...