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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление переменных List<T> и скорость. 
:(
    Опции темы
slavaentp
Дата 29.11.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я как-то написал прогу, где когда нажимаешь клавишу какую-то, добавляется один элемент в List<int>, затем некоторые вещи с ним проделываются, после чего добавленный элемент удалялся(RemoveAt).

Это происходило очень часто, и я заметил, что программа стала конкретно тормозить. Я вначале не понимал в чём дело, а потом выяснил, что это именно из-за того, что я удалял элемент из списка.

Правильно ли я понимаю, что из List<T> лучше не удалять ничего, т.к. при частом обращении будет тормозить? Или всё-таки можно удалять элементы списка, не теряя при этом значительно скорости?
PM MAIL   Вверх
Exai1e
Дата 29.11.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
slavaentp
Дата 29.11.2009, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Exai1e @ 29.11.2009,  22:34)
slavaentp, только что сделал тестовую программу, удаляю элементы, ничего не тормозит, да и не должно ничего тормозить) ошибка видимо где у вас в другом месте

Я тоже не понял, почему тормозило, просто это было по факту. Причём тормозило не всегда. Там две переменные изменялись, цифра увеличивалась на 1 при нажатии клавиши. Одну клавишу нажмёшь - ints[0] увеличится, другую - ints[1] увеличится, две всего. Так когда одну увеличивал, тормозов не было, а когда другую - были. А удалялась третья переменная ints[2], которая учатсвовала в расчёте первых двух. Я абсолютно не понимаю логику того глюка, но он был и факт ,что когда я убрал RemoveAt, то есть перестал удалять третью переменную, он исчез.

Надеюсь, что-нибудь понятноsmile))

Это сообщение отредактировал(а) slavaentp - 29.11.2009, 22:43
PM MAIL   Вверх
Экскалупатор
Дата 29.11.2009, 22:48 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



slavaentp, а зачем были эти танцы с бубном? чем было оправдано в твоем случае использование такого элемента как List<int>? можно было просто массив или структуру сделать, или даже просто объявить три переменные...
PM MAIL ICQ   Вверх
DenWPF
Дата 29.11.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ну в одном он прав, при удалении должно тормозить, ЛИСТ это же просто наш добрый массив, и его надо переписать и записать в новый.
БРЕД - то что я написал выше=)
лист, это связный список и при удалении одной переменой просто перезаписывается один адрес.
PM MAIL   Вверх
PashaPash
Дата 30.11.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(DenWPF @  29.11.2009,  23:07 Найти цитируемый пост)

лист, это связный список и при удалении одной переменой просто перезаписывается один адрес. 

Лист - это старый добрый массив. С временем удаления O(n). Связный список - это LinkedList.


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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