Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Удаление переменных List<T> и скорость.


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

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

Правильно ли я понимаю, что из List<T> лучше не удалять ничего, т.к. при частом обращении будет тормозить? Или всё-таки можно удалять элементы списка, не теряя при этом значительно скорости?

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

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

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

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

Автор: Экскалупатор 29.11.2009, 22:48
slavaentp, а зачем были эти танцы с бубном? чем было оправдано в твоем случае использование такого элемента как List<int>? можно было просто массив или структуру сделать, или даже просто объявить три переменные...

Автор: DenWPF 29.11.2009, 23:07
ну в одном он прав, при удалении должно тормозить, ЛИСТ это же просто наш добрый массив, и его надо переписать и записать в новый.
БРЕД - то что я написал выше=)
лист, это связный список и при удалении одной переменой просто перезаписывается один адрес.

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

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)