Проблемы создания объектных образов и восстановления значений

Проблемы создания объектных образов и восстановления значений

Операции создания объектных образов и восстановления из них значений очень удобны с точки зрении программиста, но такой упрощенный подход при обмене элементами стека и динамической памяти имеет свои специфические проблемы производительности и не гарантирует типовой безопасности. Чтобы понять проблемы производительности, рассмотрим следующие шаги, которые приходится выполнять при создании объектного образа и восстановлении значения обычного целого числа.

1. Новый объект нужно разместить в управляемой динамической памяти.

2. Значение размещенных в стеке данных нужно записать в соответствующее место в памяти.

3. При восстановлении значений, сохраненного в объекте, размещенном в динамической памяти, это значение нужно снова вернуть в стек.

4. Неиспользуемый объект в управляемой динамической памяти (в конце концов) должен быть уничтожен сборщиком мусора.

В нашей ситуации метод Main() с точки зрения производительности не имеет никаких проблем, но соответствующие проблемы появятся, когда ArrayList будет содержать тысячи целых значений, если вашей программе придется регулярно их обрабатывать.

Теперь рассмотрим проблему отсутствия: типовой безопасности в отношении операции восстановления значений из объектного образа. Вы знаете, что для восстановления значения в рамках синтаксиса C# используется оператор преобразования. Но каким будет это преобразование – успешным или неудачным, – выяснится только в среде выполнения, При попытке восстановить значение в неправильный тип данных вы получите InvalidCastException.

static void Main(string[] args) {

 …

 // Ой! Исключение времени выполнения!

 Console.WriteLine("Значение вашего int: {0}", (short)myInts[0]);

 Console.ReadLine();

}

В идеальной ситуации компилятор C# должен решать проблемы некорректных операций восстановления из объектного образа во время компиляции, а не в среде выполнения. В связи с этим, в действительно идеальной ситуации, можно было бы сохранить типы, характеризуемые значениями, в контейнере, который не требовал бы преобразования в объект. В .NET 2.0 обобщения дают решение именно этих проблем. Однако перед тем как углубиться в детали использования обобщений, давайте посмотрим, как программисты пытались бороться с этими проблемами в .NET 1.x. с помощью строго типизованных коллекций.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Поиск образов и Диспетчер CD/DVD

Из книги Запись CD и DVD: профессиональный подход автора Бахур Виктор

Поиск образов и Диспетчер CD/DVD Если вы не знаете, где на жестком диске находятся файлы-образы, созданные другими программами, или забыли названия папок, в которых сохранили виртуальные компакт-диски, созданные программой Alcohol, вы можете воспользоваться функцией Поиск


Запись CD/DVD из образов

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Запись CD/DVD из образов Запустите программу Alcohol 120 %. В группе Основные операции выберите Запись CD/DVD из образов. Откроется Мастер записи дисков из образов (рис. 2.19). Работать с мастером можно, если на компьютере имеется хотя бы один файл-образ. Щелкнув на кнопке Обзор, вы


Операции создания объектного образа и восстановления из объектного образа

Из книги VBA для чайников автора Каммингс Стив

Операции создания объектного образа и восстановления из объектного образа Ввиду того, что в .NET определяются две главные категории типов (характеризуемые значением или ссылкой), может понадобиться представление переменной одной категории в виде переменной другой


Примеры создания объектных образов и восстановления значений

Из книги Первые шаги с Windows 7. Руководство для начинающих автора Колисниченко Денис Н.

Примеры создания объектных образов и восстановления значений Вы, наверное, спросите, когда действительно бывает необходимо вручную выполнять преобразование в объектный тип (или восстановление из объектного образа)? Предыдущий пример был исключительно иллюстративным,


Снова о создании объектных образов, восстановлении значений и System.Object

Из книги Ubuntu 10. Краткое руководство пользователя автора Колисниченко Д. Н.

Снова о создании объектных образов, восстановлении значений и System.Object Чтобы понять, в чем заключаются преимущества использования обобщений, следует выяснить, какие проблемы возникают у программиста без их использования. Вы должны помнить из главы 3, что платформа .NET


Проблемы создания объектных образов и строго типизованные коллекции

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

Проблемы создания объектных образов и строго типизованные коллекции Строго типизованные коллекции можно найти в библиотеках базовых классов .NET и это очень полезные программные конструкции. Однако эти пользовательские контейнеры мало помотают в решении проблем


Роль объектных графов

Из книги Windows 10. Секреты и устройство автора Алмаметов Владимир

Роль объектных графов Как уже упоминалось, при сериализации объекта среда CLR учитывает состояния всех связанных объектов. Множество связанных объектов представляется объектным графом. Объектные графы обеспечивают простой способ учета взаимных связей в множестве


1.9. Запись ISO-образов

Из книги автора

1.9. Запись ISO-образов Ранее Windows умела записывать только файлы на CD/DVD. Сейчас Windows 7 умеет записывать ISO-образы на болванки, причем поддерживается запись даже на диски Blu-Ray


14.4. Запись ISO-образов в Windows 7

Из книги автора

14.4. Запись ISO-образов в Windows 7 Windows наконец-то научилась записывать ISO-образы на диск. Записать ISO-образ на болванку, например, скачанный с Интернета, очень просто. Для этого щелкните на файле образа правой кнопкой мыши и выберите команду Записать образ диска. Далее нужно


12.4.1. Создание и монтирование образов CD/DVD

Из книги автора

12.4.1. Создание и монтирование образов CD/DVD Довольно часто бывает нужно создать образ оптического диска (у меня такая потребность возникает примерно один раз в неделю). Причина проста: или под рукой нет чистой «болванки», или же надо поработать с чужим диском, который


12.4.2. Запись образов на «болванку»

Из книги автора

12.4.2. Запись образов на «болванку» Предположим, у вас есть образ cd.iso, который нужно записать на компакт-диск, но вы не хотите (или не имеете возможности) использовать для этого графические программы типа Nero или k3b. В этом случае можно применить программу cdrecord (пакет


12.4.4. Преобразование форматов образов дисков

Из книги автора

12.4.4. Преобразование форматов образов дисков Иногда требуется записать созданный в другой программе образ диска, формат которого отличается от ISO9660. Наиболее часто встречаются образы дисков в форматах IMG, BIN, CUE, NRG, CCD.Если у файла образа «расширение»[3] img, то это еще не


19.4. Загрузка с ISO-образов

Из книги автора

19.4. Загрузка с ISO-образов Предположим, вы скачали ISO-образ новой версии Ubuntu, но у вас нет «болванки», чтобы записать на нее образ и загрузиться с полученного диска. Могу вас обрадовать: «болванка» вам для этого не понадобится — GRUB2 умеет использовать ISO-образы в качестве


1.2.2. Компоновка объектных файлов

Из книги автора

1.2.2. Компоновка объектных файлов После того как файлы main.c и reciprocal.cpp скомпилированы, необходимо скомпоновать их. Если в проект входит хотя бы один файл C++, компоновка всегда осуществляется с помощью компилятора g++. Если же все файлы написаны на языке С, нужно использовать