Какие еще улучшения в словаре .NET по сравнению с HashTable, кроме [un] бокса? - PullRequest
4 голосов
/ 13 мая 2009

Попытка убедить кого-то перейти с .NET 1.1

Я видел людей, которые говорили, что одним из преимуществ использования класса Dictionary в пост .NET 1.1 является увеличение производительности из-за отсутствия необходимости распаковывать / приводить объекты. Есть ли еще какие-то улучшения?

Или какие-либо другие общие преимущества для перехода от .NET 1.1?

Ответы [ 9 ]

16 голосов
/ 13 мая 2009

Джордж , я могу ответить на этот вопрос в двух словах:

Тип Безопасность.

А теперь я буду расширяться. Вероятно, самое большое преимущество перехода на .NET 2.0 - это дженерики и универсальные коллекции. Большим преимуществом IMO, чем улучшением производительности, является отсутствие необходимости упаковывать и распаковывать типы значений (что на самом деле не так уж важно, если у вас нет огромных списков целочисленных массивов, через которые вы непрерывно обрабатываете), не нужно приводить к и от объект. Или, в двух словах, «безопасность типов». Во время компиляции вы знаете, каков базовый тип коллекции, и вы не можете отклониться от этого. С неуниверсальной коллекцией вы можете бросить туда любую старую вещь, и если вы не задумываетесь над типом (который еще сильнее сказывается на производительности, чем бокс), вы можете получить InvalidCastException, выбрасываемый в неподходящее время. ,

Тем не менее, зачем останавливаться на 2.0? .NET 3.0 имеет WCF и WPF, которые представляют собой новые замечательные способы общения и представления. .NET 3.5 имеет LINQ и лямбда-выражения, которые будут изменять способ обработки коллекции.

Скажи своему другу, чтобы он перестал жить в темные века. Время обновлять!

3 голосов
/ 13 мая 2009

Когда прекращается поддержка .NET 1.1? Это уже не поддерживается? Каковы ваши шансы увидеть исправление ошибки?

Кроме того, количество людей, которые знают что-либо о .NET 1.1, уменьшается с каждым годом. Вскоре будет больше людей, которые знают VB6, чем тех, кто знает .NET 1.1.

Пора обновить. Если вам все еще не нужна поддержка Windows 2000 или ниже, у вас не так много оправданий, чтобы этого не делать.

3 голосов
/ 13 мая 2009

Если вы уже знаете об общих преимуществах использования строго типизированных коллекций, null теперь является допустимым значением. Если старый HashTable возвратил null для поиска ключа, это может означать, что ключ не существует, или это может означать, что этот ключ ссылается на значение null. Вы действительно не знали.

В словаре, если вы выполняете прямой поиск, а ключ не существует, выдается исключение.

Кроме того, коллекции .Net 2.0 используют универсальные шаблоны для поддержки строго типизированного перечисления (IEnumerable<T>). Реализация IEnumerable в .Net использует ленивую оценку, и это делает все виды забавных вещей легкими (и производительными!), Которые раньше было практически невозможно сделать. Вероятно, в 9 случаях из 10, когда вы передаете или возвращаете массив или ArrayList через функцию, вы можете вместо этого использовать IEnumerable.

2 голосов
/ 13 мая 2009

Переход с VS2003 и .NET 1.1, по крайней мере на VS2005 и .NET 2.0, стоит того, чтобы его принять. Более поздние версии .NET Framework после 2.0 кажутся аддитивными. Нет или не очень много ломающих библиотек классов .NET. Они просто добавили новые пространства имен и классы. VS2008 и, насколько я понимаю, более поздние версии, выходящие на конвейер, будут поддерживать обратную совместимость обратно к .NET 2.0. Это делает обновление вашей IDE почти тривиальным (я думаю, что вы должны преобразовать проекты в типы проектов VS2008), и вы получаете преимущества новых улучшений IDE, все еще используя старые версии платформы. Некоторые из наиболее важных вещей, которые мне нравятся только в IDE VS2008, - это разделенное представление при работе в ASP .NET, новые окна CSS и javascript intellisense (VS2008 SP1, я полагаю, для этой функции).

По личному опыту у нас были некоторые проблемы с активными отчетами. Нам пришлось обновить его версии для работы с новой средой IDE / Framework, и когда мы перешли с VS2008 с VS2005, некоторые наши проекты пакетов служб SSIS не открылись правильно, потому что мы все еще находимся на SQL Server 2005, поэтому обязательно проверьте любые зависимости в вашей среде IDE 2003 со всеми сторонними приложениями, которые вы можете запускать.

Ральфондо прав, хотя, и я бы проголосовал за него, если бы у меня был представитель. Дженерики наверняка изменят правила игры и не позволят вам самостоятельно создавать типизированные коллекции для обеспечения безопасности типов. Серьезно .... поиск в Google, что вы должны делать в .NET 1.1 по сравнению с более поздними версиями. Разница между днем ​​и ночью.

2 голосов
/ 13 мая 2009

Другие преимущества:

GridView, Masterpages, Sitemap, LINQ !!!! (3,5 рамки)

Нет никаких причин, по которым любой разработчик (или компания) должен продолжать писать новый код в VS 2003, или, по крайней мере, я так думаю.

Теперь, если это старый проект, написанный на платформе 1.1, то это совсем другое дело ...

1 голос
/ 13 мая 2009

Это не совсем проблема, связанная с производительностью, но как насчет IDE? IDE VS2008 намного лучше, от стабильности до функций, для добавления дополнений ... Дизайнеры winForm намного проще в использовании.

1 голос
/ 13 мая 2009

Если вы ограничиваете тему только общими контейнерами, то нет. Тем не менее, .NET 2.0 представил ряд улучшений и в других областях. См. http://msdn.microsoft.com/en-us/library/t357fb32.aspx для более полного списка улучшений.

1 голос
/ 13 мая 2009

Использование Generics может сделать ваш словарь безопасным, поэтому при компиляции вы найдете код, который может пытаться добавить неправильный объект. Это лучше, чем сбой во время выполнения из-за неожиданного типа данных. Кроме того, перечислитель вводится для данных, что делает его более простым в использовании. Приведение свойства Current больше не требуется.

1 голос
/ 13 мая 2009

Будучи строго типизированным, Dictionary<,> ограничен во время компиляции и поэтому безопасен. Попытка добавить неподходящие значения приведет к ошибке компиляции.

...