Выбрать главу

.NET Compact Framework не поддерживает компиляцию кода типизированных объектов DataSet, автоматически сгенерированного для настольных компьютеров, Это означает, что наиболее распространенным методом работы с объектами ADO.NET DataSet с использованием .NET Compact Framework является работа непосредственно с нетипизированным классом DataSet и подчиненными ему классами DataTable, DataColumn и DataRow. Кроме некоторого усложнения вашего кода и необходимости внимательно следить за тем, чтобы не допустить опечаток в именах столбцов и полей (распространенная ошибка), использование нетипизированных объектов DataSets не обладает никакими другими недостатками. Наиболее высокая производительность достигается тогда, когда вы работаете с нетипизированными классами непосредственно, а не через какие-либо интерфейсные уровни.

Перенос типизированных объектов ADO.NET DataSet на мобильные устройства

В Visual Studio .NET предусмотрена поддержка преобразования описаний схемы данных в исходный код типизированных объектов DataSet на стадии проектирования. К сожалению, не все из присутствующих в этом исходном коде типов, свойств и методов поддерживаются в .NET Compact Framework.

Если вы возьмете исходный код типизированного объекта DataSet, сгенерированный для настольного компьютера, и перенесете его путем копирования в проект .NET Compact Framework, то при компиляции этого проекта получите несколько сообщений об ошибках. Эти ошибки компиляции можно разбить на три категории:

1. Некоторые ошибки этого типа обусловлены наличием содержащих метаданные атрибутов классов и функций, которые не поддерживаются в .NET Compact Framework; эти метаданные можно эффективно исключить из кода, поставив перед ними символы комментария.

Например, атрибут [System.ComponentModel.ToolboxItem(true)] не поддерживается, и его можно поместить в комментарий.

2. Некоторые ошибки этого типа обусловлены отсутствием типов исключений; вместо таких исключений можно генерировать более общие исключения.

Например, поскольку в .NET Compact Framework не определено исключение new StrongTypingException(), то вместо него можно использовать исключение new Exception().

3. Некоторые ошибки этого типа обусловлены автоматически сгенерированным кодом, в котором используется функциональность, не поддерживаемая в .NET Compact Framework; функции, использующие эту функциональность, можно исключить с помощью символов комментария.

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

Вместо того чтобы отталкиваться от кода для настольного компьютера и отбрасывать ненужные части, гораздо надежнее справиться с задачей поддержки доступа к типизированным объектам DataSet, создавая собственные типизированные классы DataSet, DataTable и DataRow с нуля путем порождения строго типизированных классов из этих основных типов ADO.NET и импортирования лишь отдельных частей кода, автоматически сгенерированного для настольного проекта, в соответствии с необходимостью. Гораздо надежнее самостоятельно создать указанную поддержку с нуля и добавить лишь тот код, в котором есть необходимость, чем исходить из кода для настольных компьютеров и пытаться исключать из него отдельные фрагменты до тех пор, пока он не заработает. Вы получите более понятный, лучше разработанный и более легкий в сопровождении код, если создадите его с самого начала. Код для настольных компьютеров следует рассматривать лишь как полезное учебное пособие и не копировать его фрагменты непосредственно в код мобильного приложения.

Меры по обеспечению максимальной производительности при работе с объектами ADO.NET DataSet

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