Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация отображения элементов в ListView 
:(
    Опции темы
Fiks
Дата 25.2.2009, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 21.2.2009

Репутация: нет
Всего: нет



Всем добрый вечер! Такая ситуцая: есть в форме компонент LstView1. Его элементы заполняю файлами(ниже представлен код).
Для каждого отдельного файла я добавляю соответствующую иконку из ImageList.
Однако при таком способе происходит небольшое подтормаживание. Помогите если кто знает как оптимизировать добавление иконок к файлам.
Заранее благодарю!


Код

  FileInfo[] Files = theFolder.GetFiles(); //Получаем файлы в текущей папке

for (int i = 0; i < Files.Length; i++)
            {
                  listView1.Items.Add(Files[i].Name.ToString());
                   
                  switch (Files[i].Extension.ToString())
                    {
                        case ".txt": listView1.Items[i].ImageIndex = 1;
                            break;
                        case ".avi": listView1.Items[i].ImageIndex = 2;
                            break;
                        default: listView1.Items[i].ImageIndex = 3;
                            break;
                    }
            }


Это сообщение отредактировал(а) Fiks - 25.2.2009, 22:16
PM MAIL   Вверх
source777
Дата 25.2.2009, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(Fiks @  25.2.2009,  22:15 Найти цитируемый пост)
Помогите если кто знает как оптимизировать добавление иконок к файлам.
Это конечно охренительная идея, но с чего ты взял, что добавление иконок медленная операция? По моим замерам на неё тратится ~ 0.3-0.4 % от времени заполнения списка(тестировал иконки 16х16, 24-битные)...

P.S. Дежавю, но в третий раз уже на этом форуме пишу, что в таких случаях foreach работает быстрее (объяснения на тему почему это так ищи на форуме в моих сообщениях)...

Код

        private FileInfo[] files;
        private void InitListView()
        {
            listView1.Items.Clear();
            files = new DirectoryInfo(Environment.SystemDirectory).GetFiles(); 
        }

        private void button1_Click(object sender, EventArgs e)
        {            
            InitListView();
            Fill1(); // 6.845 %
            InitListView();
            Fill2(); // 4.235 %            
        }

        // твой вариант
        void Fill1() 
        {
            for (int i = 0; i < files.Length; i++)
            {
                listView1.Items.Add(files[i].Name.ToString());

                switch (files[i].Extension.ToString())
                {
                    case ".txt": listView1.Items[i].ImageIndex = 1;
                        break;
                    case ".avi": listView1.Items[i].ImageIndex = 2;
                        break;
                    default: listView1.Items[i].ImageIndex = 3;
                        break;
                }
            }
        }

        void Fill2()
        {
            foreach (var file in files)
            {
                var lvi = new ListViewItem();
                lvi.Text = file.Name;
                switch (file.Extension)
                {
                    case ".txt": lvi.ImageIndex = 1;
                        break;
                    case ".avi": lvi.ImageIndex = 2;
                        break;
                    default: lvi.ImageIndex = 3;
                        break;
                }
                listView1.Items.Add(lvi);
            }
        }

Как видно из показаний профайлера, вариант Fill2() работает на 60% быстрее...

Это сообщение отредактировал(а) source777 - 25.2.2009, 23:26


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0414 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.