Джонсон Харт - Системное программирование в среде Windows
Преобразование символов из кодировки ASCII в Unicode
Измерения выполнялись для восьми программ, каждая из которых преобразовывала файл размером 12,8 Мбайт в файл размером 25,6 Мбайт. Соответствующие результаты представлены в табл. В.2.
1. Программа atou (программа 2.4) сопоставима с программой cpW, использующей буфер небольшого размера.
2. Программа atouSS — первый из "быстрых" вариантов реализации, основанных на программе atou. В нем применяются флаги последовательного режима обработки и буфер небольшого размера. Эта, а также две следующие программы сгенерированы на основе одного и того же проекта, atouLBSS, но с определением разных комбинаций макросов.
3. Программа atouLB использует буфер большого размера (8192 байта), но не использует флаги последовательного режима обработки.
4. Программа atouLSFP использует буфер большого размера и флаги последовательного режима обработки, но кроме этого предварительно устанавливает требуемый размер выходного файла. Эта мера продемонстрировала свою высокую эффективность.
5. Программа atouMM использует отображение файлов для операций файлового ввода/вывода и вызывает функции, листинг которых приведен в программе 5.3.
6. Программа atouMT представляет собой многопоточную реализацию приведенной в главе 14 программы, основанной на схеме множественной буферизации без применения асинхронного ввода/вывода.
7. Программа atouOV (программа 14.1) использует перекрывающийся ввод/вывод и не может выполняться на двух системах семейства Windows 9x.
8. Программа atouEX (программа 14.2) использует перекрывающийся ввод/вывод и не будет выполняться на двух системах семейства Windows 9x.
Комментарии1. Результаты показывают, что применение буферов увеличенного размера и флагов последовательной обработки (а возможно, и сочетания этих факторов) обеспечивает некоторый выигрыш в производительности.
2. Предварительная установка размера выходного файла (atouLSFP) очень эффективна и приводит к резкому повышению производительности на всех однопроцессорных системах. В то же время, преимущества SMP-систем оказались весьма незначительными. Эту же методику можно было применить и в предыдущих примерах копирования файлов.
3. В этих примерах процессорное время составляет лишь незначительную долю общего времени.
4. Помимо того, что использование перекрывающегося ввода/вывода ограничивается системами Windows NT и его трудно программировать, он обеспечивает очень низкую производительность. Заметьте, что основная доля общего времени приходится не на пользовательское или системное время, а на реальное время. Создается впечатление, что в случае NT4 система испытывает трудности с планированием доступа к диску, и это препятствие нельзя было устранить путем изменения размера буфера (как большую, так и в меньшую сторону) до тех пор, пока не были использованы буферы размером 65 Кбайт. В NT5 эта проблема не возникает.
5. Ни расширенный ввод/вывод, ни многопоточный режим не обеспечивают сколько-нибудь заметного повышения производительности.
6. Использование отображения файлов в операциях ввода/вывода способно увеличивать производительность, обеспечивая ее повышение примерно на 30% по сравнению с остальными методами. Результаты для SMP-сервера оказались еще лучшими.
Таблица В.2. Показатели производительности программ преобразования символов из кодировки ASCII в Unicode
ЦП Pentium III Pentium III Pentium LT Celeron LT Xeon 4×Xeon ОС W2000 W2000 W2000 XP W2000 W2000 Файловая система FAT NTFS NTFS NTFS NTFS NTFS atou Реальное время 3,24 7,16 33,53 6,27 5,77 2,77 Пользовательское время 0,31 0,33 0,01 0,06 0,06 0,08 Системное время 0,46 0,72 3,55 0,54 0,63 0,63 atouSS Реальное время 3,77 6,21 43,53 10,12 5,68 2,48 Пользовательское время 0,20 0,23 0,11 0,07 0,04 0,14 Системное время 0,52 0,81 3,17 0,04 0,35 0,81 atouLB Реальное время 4,38 6,41 28,51 5,95 4,75 2,47 Пользовательское время 0,10 0,07 0,05 0,03 0,03 0,08 Системное время 0,26 0,34 0,63 0,19 0,21 0,187 atouLSFP Реальное время - - 5,17 1,38 1,28 2,03 Пользовательское время - - 0,07 0,05 0,09 0,06 Системное время - - 0,61 0,16 0,10 0,11 atouMM Реальное время 4,35 2,75 3,46 3,90 3,74 0,77 Пользовательское время 0,27 0,29 0,09 0,07 0,05 0,14 Системное время 0,19 0,19 0,16 0,14 0,10 0,09 atouMT Реальное время 4,84 6,18 5,83 6,61 5,99 3,55 Пользовательское время 0,14 0,15 0,26 0,04 0,06 0,02 Системное время 0,45 0,46 0,66 0,33 0,15 0,31 atouOV Реальное время 9,54 8,85 32,42 6,84 5,63 3,17 Пользовательское время 0,14 0,12 0,21 0,06 0,06 0,06 Системное время 0,24 0,23 0,42 0,18 0,21 0,17 atouEX Реальное время 5,67 5,92 30,65 6,50 5,19 2,64 Пользовательское время 1,10 1,50 0,29 0,35 0,41 0,64 Системное время 1,19 1,74 0,77 0,69 0,59 1,91Поиск заданных комбинаций символов