Книга: Программирование мобильных устройств на платформе .NET Compact Framework
Оглавление книги
- Об авторе
- Предисловие
- Мобильные устройства на наших глазах претерпевают революционные изменения
- Чего в наши дни не хватает большинству технических книг?
- Что нового в этой книге?
- На кого рассчитана эта книга?
- Благодарности
- От издательства
- ГЛАВА 1 Введение
- Добро пожаловать в мир разработки мобильного программного обеспечения
- Успех определяется несколькими ключевыми факторами
- Как читать эту книгу
- Способы разработки программ для мобильных устройств
- Серверные приложения для мобильных устройств
- Мобильные приложения на основе модели интеллектуального клиента
- Управляемый код
- Резюме
- ГЛАВА 2 Характеристики мобильных приложений
- Введение
- Распространенные схемы использования мобильных устройств
- Форм-фактор
- Требования надежности
- Важные характеристики мобильных приложений
- Время запуска
- Отклик устройства
- Фокусирование внимания на отдельных задачах
- Настройка взаимодействия с внешними источниками информации
- Единообразие стиля интерфейса
- Различия в архитектуре компьютеров
- Резюме
- ГЛАВА 3 Внутренняя структура .NET Compact Framework
- Введение
- Как проектировалась .NET Compact Framework
- .NET Compact Framework как подмножество платформы для настольных компьютеров
- Управляемый код и собственный код
- Исполнительный механизм
- Библиотеки управляемого кода
- Библиотеки базовых классов
- Библиотеки пользовательского интерфейса
- Библиотеки клиентов Web-служб
- Библиотеки XML
- Библиотеки данных
- Вынесение полезной отладочной и проектной информации в необязательные компоненты
- Средства подключения к базам данных SQL СЕ/SQL
- Элементы, отсутствующие в первой версии .NET Compact Framework
- Как запускается и выполняется код
- Управление памятью и сборка мусора
- Резюме
- ГЛАВА 4 Как добиться успеха при разработке мобильных приложений
- Введение
- Трудности постоянного и временного характера, с которыми приходится сталкиваться при разработке программного обеспечения
- НА ЗАМЕТКУ
- Трудности временного характера и способы их преодоления
- Трудности постоянного характера и методологии, привлекаемые для их разрешения
- Разработка программ является итеративным процессом, который, тем не менее, также должен подчиняться определенным правилам
- Детали ничего не стоят, если общая картина неверна
- Решайте задачи в определенной очередности; не бойтесь при необходимости возвращаться назад
- Шаг 0: прежде чем приступать к работе, определите сферу применения вашего приложения
- Шаг 1: начните с анализа проблем производительности и никогда не упускайте их из виду
- Высокая производительность — основная предпосылка создания удобных условий работы для пользователя
- Пример разработки пользовательского интерфейса с учетом обеспечения высокой производительности
- Шаг 2: спроектируйте подходящий пользовательский интерфейс
- Шаг 3: выберите подходящие модели данных и памяти
- Шаг 4: выберите подходящую модель коммуникации и модель ввода-вывода
- Работа с локальными ресурсами устройства
- Формат данных
- Различные уровни абстракции программной модели
- Выбор формата хранения данных и программной модели
- Работа с внешними по отношению к устройству ресурсами
- Производительность и надежность
- Уровни абстракции программной модели
- При необходимости вернитесь к шагам 0, 1, 2 и 3
- Шаг 5: пакетирование приложения для его установки
- Резюме
- ГЛАВА 5 Наш друг конечный автомат
- Введение
- Что такое конечный автомат?
- Явно и неявно определенные конечные автоматы
- Подход 1: зависящее от специфики конкретной ситуации, децентрализованное, неявное управление состояниями (неудачный подход)
- Подход 2: плановое, централизованное, явное управление состояниями (удачный подход)
- Сколько конечных автоматов должно быть в приложении?
- Конечный автомат для пользовательского интерфейса
- Конечный автомат для модели памяти
- Конечный автомат для фоновых задач
- Стиль программирования: использование операторов goto и полных путей доступа в пространствах имен
- Листинг 5.4. Код программы нахождения простых чисел, предназначенный для выполнения фоновым потоком
- Листинг 5.5. Тестовая программа, которая вызывает на выполнение приведенный выше код фонового потока, осуществляющего поиск простого числа
- НА ЗАМЕТКУ
- Использование конечных автоматов в играх
- Резюме
- ГЛАВА 6 Шаг 0: прежде чем приступать к работе, определите сферу применения приложения
- Введение
- Независимое приложение или часть большой системы?
- Независимые приложения
- Наборы взаимосвязанных приложений, установленных на устройстве
- Мобильные приложения, взаимодействующие с приложениями для настольных компьютеров и серверов
- Не пытайтесь просто переносить на устройства приложения, рассчитанные на настольные компьютеры! Мыслите категориями устройств!
- Шаги по определению сферы применения мобильного приложения
- ГЛАВА 7 Шаг 1: начинайте с анализа проблем производительности и никогда не упускайте их из виду
- Введение
- Важность планомерного подхода
- Определите обязательные характеристики сценариев рабочих сеансов пользователя
- Определите контрольные точки разработки, критерии завершения которых ориентированы на достижение высокой производительности
- Несколько слов о прохождении контрольных точек
- Интерактивное взаимодействие конечных пользователей с приложением
- Абсолютная производительность критических алгоритмов
- Время от времени критически пересматривайте написанный код
- Определите модель памяти для вашего приложения
- Как можно чаще контролируйте показатели, характеризующие работу вашего приложения
- Программа для измерения характеристик кода
- Листинг 7.1. Пример кода для измерения временных интервалов, который вы можете использовать для хронометража работы своих приложений
- HA ЗАМЕТКУ
- Листинг 7.2. Тестовая программа, демонстрирующая использование приведенного выше кода для измерения временных интервалов
- Советы относительно повышения надежности результатов измерений
- Выполняйте тестирование с использованием реальных объемов данных
- Тестируйте приложения в предельных режимах
- Своевременно предпринимайте меры по поддержанию высокой производительности приложения (со временем ситуация будет только ухудшаться!)
- Определение задач, решение которых необходимо для достижения высокой производительности
- Ha всем, что связано с оценкой производительности, лежит печать субъективности
- Немедленная ответная реакция приложения
- Ответная реакция устройства и пульты дистанционного управления домашней электронной техникой
- Примеры, иллюстрирующие различные варианты организации обратной связи с пользователем
- Листинг 7.3. Демонстрация трех различных уровней организации обратной связи с пользователем
- Максимальная продолжительность отображения курсора ожидания
- Максимальная продолжительность загрузки/сохранения данных, а также запуска/закрытия приложения
- Накладные расходы по обработке исключений
- Резюме
- ГЛАВА 8 Производительность и управление памятью
- Определение модели памяти для приложения
- Управление памятью на макроскопическом "уровне приложения"
- Будут ли меня преследовать те же проблемы, если я пишу приложение на основе собственного кода?
- Управление "служебными" данными приложения
- Управление объемом пользовательских данных, хранящихся в памяти
- Использование модели загрузки данных по требованию
- Управление памятью на микроскопическом "уровне алгоритма"
- Пишите аккуратные алгоритмы: не сорите!
- Пишите экономные алгоритмы: разумно расходуйте память и повторно используйте объекты
- Листинг 8.2. Общий код, используемый во всех приведенных ниже вариантах тестов
- Листинг 8.3. Тестовый пример, демонстрирующий неэкономное распределение памяти (типичный первоначальный вариант реализации интересующей нас функции)
- Листинг 8.4. Рабочий класс для первого тестового примера
- Повторно используйте размещенные в памяти объекты при любом удобном случае
- Листинг 8.5. Тестовый пример, демонстрирующий уменьшение объема памяти, распределяемой для объектов (типичный образец улучшения первоначального варианта реализации интересующей нас функции)
- Листинг 8.6. Рабочий класс для второго тестового примера
- Предшествующий код оставляет возможности для внесения дальнейших улучшений
- Избегайте размещения в памяти лишних объектов
- Листинг 8.7. Тестовый пример, демонстрирующий значительное уменьшение объема памяти, распределяемой для объектов (типичный образец существенной алгоритмической оптимизации первоначального варианта реализации интересующей нас функции)
- Листинг 8.8. Рабочий класс для третьего тестового примера
- Анализ описанных выше шагов последовательной оптимизации
- Уделяйте особое внимание тому, как используются строки в ваших алгоритмах
- Резюме
- ГЛАВА 9 Производительность и многопоточное выполнение
- Введение: когда и как следует использовать многопоточное выполнение
- Многозадачность и многопоточность в современных операционных системах
- В каких случаях следует использовать фоновые потоки
- Рекомендации по использованию потоков в мобильных приложениях
- Назначайте обслуживание пользовательского интерфейса основному потоку
- Стремитесь поддерживать способность пользовательского интерфейса к отклику на высоком уровне
- Начинайте с создания однопоточного приложения
- В простых случаях пытайтесь обойтись без многопоточного выполнения, используя курсоры ожидания
- Рассмотрите возможность использования фоновых потоков, если выполнение задачи требует длительного или неопределенного времени
- Максимально упрощайте многопоточный код и документируйте его для повышения надежности
- Рассмотрите возможность предварительного выполнения некоторой работы, осуществляемой кодом
- Пример использования фонового потока для выполнения отдельной задачи
- Листинг 9.1. Код для управления выполнением одиночной задачи фоновым потоком
- Листинг 9.2. Тестовая программа для выполнения работы в фоновом потоке
- Листинг 9.3. Код для запуска и тестирования приведенного выше тестового кода
- Потоки и пользовательский интерфейс
- Работая в .NET Compact Framework, не пытайтесь получить доступ к элементам управления пользовательского интерфейса из потоков, которым они не принадлежат
- Пример использования фоновой обработки одновременно с обновлением данных высокоприоритетного потока пользовательского интерфейса
- Резюме
- ГЛАВА 10 Производительность и XML
- Введение: работа с XML
- XML или не XML?
- Сравнение XML с другими текстовыми форматами
- Различные способы хранения данных в виде текста
- Сохранение данных в виде XML
- Сохранение данных в текстовых файлах с разделителями-запятыми
- Сохранение данных в INI-файлах
- Иерархическая структура XML-данных
- Другие возможности XML
- Различные способы работы с XML
- Простой пример, иллюстрирующий применение модели XML DOM и однонаправленного чтения-записи XML-документов
- Пример: содержимое XML-файла
- XML DOM
- Соображения, побуждающие к использованию подхода, основанного на модели XML DOM
- Соображения, побуждающие избегать использования подхода, основанного на модели XML DOM
- Листинг 10.1. Использование XML DOM для сохранения данных в файле и их загрузки
- Листинг 10.2. Вызов кода, предназначенного для сохранения и загрузки XML-документа
- Модель однонаправленного чтения-записи XML-данных
- Чем XMLReader и XMLWriter отличаются от SAX?
- Соображения, побуждающие к использованию однонаправленной обработки XML-данных
- Соображения, побуждающие избегать использования однонаправленной обработки XML-данных
- Листинг 10.3. Использование однонаправленного чтения-записи XML-данных для загрузки XML-документа из файла и его сохранения
- Повышение производительности приложения перекладыванием работы на другие программы
- Избегайте выполнения сложных преобразований данных на устройстве
- Избегайте выполнения сложного поиска данных на устройстве
- Рассмотрите возможность исключения необязательной информации перед отправкой данных на устройство
- Когда не стоит перекладывать выполнение работы на сервер
- Резюме
- ГЛАВА 11 Производительность графического кода и пользовательского интерфейса
- Введение
- Стратегии проектирования высокопроизводительных пользовательских интерфейсов
- Использование встроенных средств повышения производительности
- Использование элементов управления TreeView и ListView среды .NET Compact Framework для повышения производительности приложений
- Пример: различия в производительности, обусловленные использованием различных подходов при работе с элементами управления TreeView
- Visual Studio .NET автоматически создаст и свяжет с кнопкой пустой обработчик событий
- Листинг 11.1. Заполнение данными и очистка от них элементов управления TreeView с использованием альтернативных стратегий
- Выполняйте тесты с использованием реальных объемов данных, которые будут отображаться в вашем приложении
- Отсроченный выбор — это благо! Откладывайте, откладывайте, откладывайте…
- .NET Compact Framework: не все поддерживаемые обработчики прерываний предоставляются конструктором форм Visual Studio .NET
- Пример: заполнение элемента управления TreeView данными по требованию
- Листинг 11.2. Динамическое заполнение данными элемента управления TreeView
- Будьте внимательны, когда работаете с кодом, управляемым событиями
- Пример: демонстрация возбуждения события, заключающегося в изменении содержимого текстового окна в результате установки значения свойства .Text
- Листинг 11.3. Запуск обработчика событий при изменении содержимого элемента TextBox программным путем
- Не позволяйте событиям заставать вас врасплох
- Пример приложения Pocket PC, демонстрирующий работу средств контроля запуска событий
- Листинг 11.4. Использование модели состояний для обновления интерфейса и контроль запуска событий с целью более глубокого изучения процесса обработки событий и управления им
- Не допускайте, чтобы пользователю оставалось лишь догадываться о ходе выполнения приложения
- Выбор подходящих форматов и размеров растровых изображений
- Размеры изображения имеют существенное значение
- Так много файловых форматов и так мало времени…
- Как поступать в тех случаях, когда источником изображения с высоким разрешением является само мобильное устройство
- Стратегии проектирования высокопроизводительного графического кода
- Четырехминутный практикум по работе с графикой в .NET Compact Framework
- Способы интеграции графики с кодом пользовательского интерфейса
- Отображение растровых изображений в элементе управления PictureBox
- Листинг 11.6. Создание изображения на внеэкранной растровой поверхности и передача его в элемент управления PictureBox
- Рисование непосредственно в форме
- Листинг 11.7. Создание объекта Graphics для формы
- Листинг 11.8. Подключение к функции Paint формы
- Обработчики событий или перекрытые функции?
- Реализация пользовательских элементов управления
- Листинг 11.9. Простой пользовательский элемент управления, который изменяет цвета и запускает событие, определяемое пользователем
- Листинг 11.10. Код, который должен быть помещен в форму для создания экземпляра пользовательского элемента управления
- Где рисовать — на экране или вне экрана?
- Определите собственный процесс визуализации
- Отсрочка — зло, используйте предварительные вычисления
- Пример 1: предварительная визуализация объектов бизнес-диаграммы
- Пример 2: предварительная визуализация объектов для сюжетной игры
- Кэшируйте часто используемые ресурсы
- Старайтесь избегать распределения памяти для объектов при выполнении повторяющихся или непрерывно продолжающихся операций рисования
- Резюме
- ГЛАВА 12 Производительность: подведение итогов
- Итоговые замечания по поводу производительности
- Производительность и управление памятью
- Производительность и многопоточное выполнение
- Производительность и уровни абстракции API-интерфейсов
- Связь производительности с организацией пользовательского интерфейса и работы с графикой
- Старайтесь постоянно информировать пользователя о ходе выполнения приложения
- Заключительные замечания и рекомендации
- ГЛАВА 13 Шаг 2: проектирование подходящего пользовательского интерфейса
- Мыслите категориями устройств!
- Один размер для всего не годится
- Одна рука или две?
- Возрастание роли навигационных средств при уменьшении экранного пространства
- Списки или вкладки?
- Пользовательские интерфейсы мобильных телефонов и важность соблюдения единообразия в использовании клавиш
- Сенсорные экраны и важность использования крупных кнопок
- Оптимизируйте ввод обычных данных
- Убедитесь в том, что для механизмов автоматизированного ввода предусмотрены параллельные механизмы ввода вручную
- Тестирование на эмуляторах и физических устройствах
- Проектируйте код пользовательского интерфейса мобильного приложения таким образом, чтобы его можно было легко тестировать и модифицировать
- Модель состояний для компоновки пользовательского интерфейса и управления им
- Пример кода, демонстрирующий две различные модели компоновки для одного и того же приложения
- Размещение элементов управления
- Экранное пространство — ценная вещь
- Разработка улучшенных пользовательских интерфейсов средствами .NET Compact Framework
- Динамическое создание элементов управления
- Пример создания динамического элемента управления
- Листинг 13.2. Динамическое создание элементов управления на форме во время выполнения
- Создание пользовательских элементов управления и перекрытие поведения существующих элементов управления
- Пример элемента управления TextBox с фильтром
- Листинг 13.3. Фильтрующее текстовое окно, принимающее текст в формате ###-##-####
- Листинг 13.4 Код формы для создания пользовательского элемента управления TextBox
- Использование прозрачных областей растровых изображений
- Пример использования растровых изображений с областями прозрачности
- Дополнительные эффекты с использованием прозрачных изображений
- Листинг 13.5. Код формы, демонстрирующий использование прозрачности
- Встраивание изображений в виде ресурсов приложений
- Резюме
- ГЛАВА 14 Шаг 3: разработка подходящей модели данных
- Введение в модели доступа к данным, используемые в мобильных приложениях
- Выбор подходящих абстракций для хранения данных в памяти
- Выбор подходящей модели данных, требующих долговременного хранения
- Специфика .NET Compact Framework: ADO.NET
- Для работы с базами данных использование в приложении объекта ADO.NET не является обязательным
- Элементарные сведения об объектах ADO.NET DataSet
- Отслеживание изменения данных
- Две модели использования ADO.NET
- Высокоуровневый подход, основанный на использовании объектов ADO.NET DataSet
- Низкоуровневый подход, основанный на использовании объектов подключения к данным ADO.NET
- В каких случаях следует использовать объекты ADO.NET DataSet
- Использование классов DataAdapter для организации взаимодействия с базами данных
- Использование файлов и потоков XML для сохранения и передачи данных
- Листинг 14.2. Использование параметра XMLWriteMode при сохранении объекта ADO.NET DataSet
- Сериализация объектов ADO.NET DataSet с помощью пользовательского кода
- Работа с нетипизированными объектами DataSet
- Перенос типизированных объектов ADO.NET DataSet на мобильные устройства
- Меры по обеспечению максимальной производительности при работе с объектами ADO.NET DataSet
- Листинг 14.3. Сравнение производительности различных вариантов доступа к данным с использованием объектов DataSet
- В каких случаях не следует использовать объекты ADO.NET DataSet
- Листинг 14.4. Результаты тестирования производительности при использовании пользовательского формата данных вместо объектов DataSet
- Пример использования базы данных на устройстве и управления пользовательскими данными
- Листинг 14.5. Пример пользовательского управления данными — код, помещаемый в форму Form1.cs
- Листинг 14.6. Пример кода управления данными для DatabaseAccess.cs
- Листинг 14.7. Пример кода управления данными для GameData.cs
- Листинг 14.8. Пример кода управления данными для VocabularyWord.cs
- Различные способы хранения долговременных данных
- Хранение данных в виде XML-файлов на устройстве
- Хранение данных в базах данных SQL СЕ на устройствах
- Хранение данных в базах данных SQL вне устройства (на сервере)
- Доступ к данным, хранящимся вне устройств, посредством Web-служб
- SQL СЕ
- Что такое SQL СЕ?
- Другие базы данных для мобильных устройств и модели лицензирования баз данных
- Независимый и синхронизированный режимы работы базы данных SQL СЕ.
- Использование базы данных SQL СЕ несколькими приложениями
- База данных SQL СЕ доступна не на всех типах устройств
- Visual Studio .NET 2005 и SQL СЕ
- Резюме
- ГЛАВА 15 Шаг 4: выбор подходящей коммуникационной модели
- Введение в технологии связи с помощью мобильных приложений
- Написание кодов программ для работы с мобильными сетями
- Не допускайте того, чтобы работа приложения всецело зависела от возможности подключения к сети
- Не допускайте того, чтобы поток пользовательского интерфейса блокировался на длительное время
- Работайте на самом высоком уровне абстракции, который соответствует вашим потребностям
- Всегда исходите из того, что связь может быть нарушена в любой момент
- Возбуждение и перехват исключений, которые могут приводить к образованию висячих соединений, и проблемы производительности
- Листинг 15.1. Простой код файлового ввода-вывода, иллюстрирующий различия между локальной и удаленной передачей данных
- Имитация сбоев связи с целью тестирования отказоустойчивости приложения
- Имитация сбоев связи при помощи кода на стороне клиента
- Листинг 15.2. Имитация сбоев связи с целью тестирования приложения
- Имитация сбоев связи при помощи кода на стороне сервера
- Информируйте пользователя о ходе выполнения процесса синхронизации данных
- Исходите из того, что скорость передачи данных и длительность задержек могут меняться
- Внедряйте необходимые коммуникационные средства безопасности уже на ранних стадиях проектирования приложения
- Передача данных и выбор сети
- Wi-Fi: локальные сети
- Bluetooth: персональные сети
- Сети мобильной телефонной связи/сотовая связь
- Связь посредством лотка/кабельного соединения с ПК
- Сетевой кабель
- IrDA
- Соединение равноправных узлов сети посредством IrDA
- Сокеты IrDA и .NET Compact Framework
- В настоящее время поддержка сокетов .NET для IrDA доступна лишь в .NET Compact Framework, тогда как в .NET Framework для настольных компьютеров она отсутствует
- В настоящее время код, использующий сокеты IrDA .NET Compact Framework, будет выполняться на таких физических устройствах, оборудованных аппаратурой IrDA, как Pocket PC и смартфоны, но не будет правильно выполняться на эмуляторах
- Листинг 15.3. Тестовый код, который необходимо поместить в класс формы для тестирования передачи и приема данных посредством механизма IrDA
- Листинг 15.4. Класс IrDAIrDAFileSend
- Листинг 15.5. Класс IrDAFileReceive
- Карты памяти
- Принудительная перекачка информации на устройства
- Не решаются ли все эти проблемы набором протоколов IPv6?
- Организация доступа к поступающим SMS-сообщениям на устройствах Microsoft Smartphone
- Web-службы
- Очень краткое описание Web-служб
- Вызов Web-служб с мобильного устройства
- Создание Web-службы с использованием .NET
- Листинг 15.6. Простая Web-служба
- Вызов Web-службы с устройства средствами .NET Compact Framework
- Трудности, связанные с использованием Web-служб на мобильных устройствах
- Требуются различные варианты поддержки cookie-файлов
- Листинг 15.7. Вызовы Web-служб с передачей параметров только явным образом
- Листинг 15.8. Вызов Web-служб путем неявной передачи параметров посредством cookie-файлов
- Первый вызов Web-службы часто характеризуется увеличенным временем задержки
- Передача больших объемов данных посредством запросов Web-служб неэффективна
- "Болтливость" в мобильных сетях обходится весьма недешево
- Листинг 15.9. Неэффективная организация диалога с Web-службой, в которой используется множество вызовов
- Листинг 15.10. Группирование запросов в одном вызове Web-службы
- Листинг 15.11. Код для загрузки файла с Web-сервера
- При работе с неоднородными сетевыми топологиями могут возникать трудности
- Резюме
- ГЛАВА 16 Шаг 5: упаковка и развертывание мобильного приложения
- Введение
- Нуждается ли ваше мобильное приложение в цифровой подписи?
- Инсталляция сред выполнения и других необходимых компонентов
- Динамическая установка компонентов, необходимых приложению
- Возможные варианты упаковки и установки
- Копирование и выполнение / загрузка и выполнение
- Установка под управлением устройства
- Установка под управлением настольного компьютера
- Установка с использованием карт памяти
- Установка с использованием инструмента разработки
- Установка приложений в ПЗУ
- Резюме
- ГЛАВА 17 Послесловие
- ПРИЛОЖЕНИЕ А Дополнительные ресурсы по .NET Compact Framework
- ПРИЛОЖЕНИЕ Б Примеры программ на языке Visual Basic .NET
- Почему именно VB.NET и С#?
- Примеры к главе 5 (конечные автоматы)
- Листинг 5.1. Простой код конечного автомата для игры с множественным выбором
- Листинг 5.2. Неявное изменение состояния приложения (неудачный подход)
- Листинг 5.3. Явное изменение состояния приложения (удачный подход)
- Листинг 5.4. Код программы нахождения простых чисел, предназначенный для выполнения фоновым потоком
- Листинг 5.5. Тестовая программа, которая вызывает на выполнение приведенный выше код фонового потока, осуществляющего поиск простого числа
- Примеры к главе 7 (производительность: введение)
- Листинг 7.1. Пример кода для измерения временных интервалов, который вы можете использовать для хронометрирования работы своих приложений
- Листинг 7.2. Тестовая программа, демонстрирующая использование приведенного выше кода для измерения временных интервалов
- Листинг 7.3. Демонстрация трех различных уровней организации обратной связи с пользователем
- Листинг 7.4. Сравнение производительности двух алгоритмов, в одном из которых используются исключения, а во втором — нет
- Примеры к главе 8 (производительность и память)
- Листинг 8.1. Применение отложенной загрузки, кэширования и освобождения графических ресурсов
- Листинг 8.2. Общий код, используемый во всех приведенных ниже вариантах тестов
- Листинг 8.3. Тестовый пример, демонстрирующий неэкономное распределение памяти (типичный первоначальный вариант реализации интересующей нас функции)
- Листинг 8.4. Рабочий класс для первого тестового примера
- Листинг 8.5. Тестовый пример, демонстрирующий уменьшение объема памяти, распределяемой для объектов (типичный образец улучшения первоначального варианта реализации интересующей нас функции)
- Листинг 8.6. Рабочий класс для второго тестового примера
- Листинг 8.7. Тестовый пример, демонстрирующий значительное уменьшение объема памяти, распределяемой для объектов (типичный образец существенной алгоритмической оптимизации первоначального варианта реализации интересующей нас функции)
- Листинг 8.8. Рабочий класс для третьего тестового примера
- Листинг 8.9. Сравнение эффективности использования строк и класса stringBuilder в алгоритмах
- Примеры к главе 9 (производительность и многопоточное выполнение)
- Листинг 9.1. Код для управления выполнением одиночной задачи фоновым потоком
- Листинг 9.2. Тестовая программа для выполнения работы в фоновом потоке
- Листинг 9.3. Код для запуска и тестирования приведенного выше тестового кода
- Листинг 9.4. Код, который должен быть помещен в класс Smartphone Form1.cs
- Листинг 9.5. Код класса FindNextPrimeNumber.cs
- Примеры к главе 10 (производительность и XML)
- Листинг 10.1. Использование XML DOM для сохранения данных в файле и их загрузки
- Листинг 10.2. Вызов кода, предназначенного для сохранения и загрузки XML-документа
- Листинг 10.3. Использование однонаправленного чтения/записи XML-данных для загрузки XML-документа из файла и его сохранения
- Примеры к главе 11 (производительность и графика)
- Листинг 11.1. Заполнение данными и очистка от них элементов управления TreeView с использованием альтернативных стратегий
- Листинг 11.2. Динамическое заполнение данными элемента управления TreeView
- Листинг 11.3. Запуск обработчика событий при изменении содержимого элемента TextBox программным путем
- Листинг 11.4. Использование модели состояний для обновления интерфейса и контроль запуска событий с целью более глубокого изучения процесса обработки событий и управления им
- Листинг 11.5. Вызов метода Update() элемента управления для отображения пояснительного текста, информирующего о ходе выполнения задачи
- Листинг 11.6. Создание изображения на внеэкранной растровой поверхности и передача его в элемент управления PictureBox
- Листинг 11.7. Создание объекта Graphics для формы
- Листинг 11.8. Подключение к функции Paint формы
- Листинг 11.9. Простой пользовательский элемент управления, который изменяет цвета и запускает событие, определяемое пользователем
- Листинг 11.10. Код, который должен быть помещен в форму для создания экземпляра пользовательского элемента управления
- Листинг 11.11. Три полезных способа кэширования графических ресурсов
- Примеры к главе 13 (проектирование пользовательского интерфейса)
- Листинг 13.1. Использование конечного автомата для экспериментов с двумя различными вариантами компоновки пользовательского интерфейса
- Листинг 13.2. Динамическое создание элементов управления на форме во время выполнения
- Листинг 13.3. Фильтрующее текстовое окно, принимающее текст в формате ###-##-####
- Листинг 13.4. Код формы для создания пользовательского элемента управления TextBox
- Листинг 13.5. код формы, демонстрирующий использование прозрачности '
- Листинг 13.6. Код формы, демонстрирующий загрузку встроенных ресурсов
- Примеры к главе 14 (данные)
- Листинг 14.1. Простой пример создания и использования объекта ADO.NET DataSet
- Листинг 14.2. Использование параметра XMLWriteMode при сохранении объекта ADO.NET DataSet
- Листинг 14.3. Сравнение производительности различных вариантов доступа к данным с использованием объектов DataSet
- Листинг 14.4. Результаты тестирования производительности при использовании пользовательского формата данных вместо объектов DataSet
- Листинг 14.5. Пример пользовательского управления данными — код, помещаемый в форму Form1.cs
- Листинг 14.6. Пример кода управления данными для DatabaseAccess.cs
- Листинг 14.7. Пример кода управления данными для GameData.cs
- Листинг 14.8. Пример кода управления данными для VocabularyWord.cs
- Примеры к главе 15 (передача данных)
- Листинг 15.1. Простой код файлового ввода-вывода, иллюстрирующий различия между локальной и удаленной передачей данных
- Листинг 15.2. Имитация сбоев при передаче данных для тестирования приложения
- Листинг 15.3. Тестовый код, который необходимо поместить в класс формы для тестирования передачи и приема данных посредством механизма IrDA
- Листинг 15.4. Класс IrDAFileSend
- Листинг 15.5. Класс IrDAFileReceive
- Листинг 15.6. Простая Web-служба
- Листинг 15.7. Вызовы Web-служб с передачей параметров только явным образом
- Листинг 15.8. Вызов Web-служб путем неявной передачи параметров посредством cookie-файлов
- Листинг 15.9. Неэффективная организация диалога с Web-службой, в которой используется множество вызовов
- Листинг 15.10. Группирование запросов в одном вызове Web-службы
- Листинг 15.11. Код для загрузки файла с Web-сервера
- Сноски из книги
- Содержание книги
- Популярные страницы
Оглавление статьи/книги
- Об авторе
- Предисловие
- Благодарности
- От издательства
- ГЛАВА 1 Введение
- ГЛАВА 2 Характеристики мобильных приложений
- ГЛАВА 3 Внутренняя структура .NET Compact Framework
- ГЛАВА 4 Как добиться успеха при разработке мобильных приложений
- ГЛАВА 5 Наш друг конечный автомат
- ГЛАВА 6 Шаг 0: прежде чем приступать к работе, определите сферу применения приложения
- ГЛАВА 7 Шаг 1: начинайте с анализа проблем производительности и никогда не упускайте их из виду
- ГЛАВА 8 Производительность и управление памятью
- ГЛАВА 9 Производительность и многопоточное выполнение
- ГЛАВА 10 Производительность и XML
- ГЛАВА 11 Производительность графического кода и пользовательского интерфейса
- ГЛАВА 12 Производительность: подведение итогов
- ГЛАВА 13 Шаг 2: проектирование подходящего пользовательского интерфейса
- ГЛАВА 14 Шаг 3: разработка подходящей модели данных
- ГЛАВА 15 Шаг 4: выбор подходящей коммуникационной модели
- ГЛАВА 16 Шаг 5: упаковка и развертывание мобильного приложения
- ГЛАВА 17 Послесловие
- ПРИЛОЖЕНИЕ А Дополнительные ресурсы по .NET Compact Framework
- ПРИЛОЖЕНИЕ Б Примеры программ на языке Visual Basic .NET
- Сноски из книги
- Содержание книги
- Популярные страницы
Похожие страницы
- Специфика .NET Compact Framework: ADO.NET
- Листинг 14.2. Использование параметра XMLWriteMode при сохранении объекта ADO.NET DataSet
- Элементарные сведения об объектах ADO.NET DataSet
- ПРИЛОЖЕНИЕ А Дополнительные ресурсы по .NET Compact Framework
- ПРИЛОЖЕНИЕ Б Примеры программ на языке Visual Basic .NET
- В чем состоит разница между ADO и ADO.NET?
- .NET Compact Framework как подмножество платформы для настольных компьютеров
- Серверные приложения для мобильных устройств
- Поиск информации в Web с помощью мобильных устройств имеет свои особенности
- Программирование мобильных устройств на платформе .NET Compact Framework
- 1.1. Введение в объектно-ориентированное программирование
- Улучшенный протокол локальных соединений (XNET)