Залепа №11. Зазеркалье отдыхает.
В .NET активно применяется механизм отражений. Он позволяет с помощью метаданных получать подробное описание типов, хранящихся в сборках.
Цитата:
Термин "отражение" (reflection) означает просмотр метаданных для получения информации о сборке, модуле или типе. .NET Framework использует отражение во время выполнения, чтобы получить важные сведения о загружаемых сборках. Именно применяя отражение Visual Studio NET получает данные IntelliSense.
Говоря по-русски, отражение - механизм, позволяющий программам (включая и разработанные Вами модули) получать во время своей работы данные о типах (классах, их методах, свойствах и т.д.) из любых доступных сборок. Т.е. когда IntelliSense показывает список свойств, событий и методов объекта или класса, то он (IntelliSense) получает эти данные через отражение именно из той сборки, которая содержит требуемый класс. Аналогично работает и окно свойств (Properties) - оно так же считывает через отражение данные о свойствах и событиях и отображает эти данные в виде таблицы.
Что ж, здорово, когда можно получать данные непосредственно из скомпилированного модуля - информация окажется всегда актуальной, вне зависимости от версии этого самого модуля. Это было бы очень ценной возможностью, если бы... если бы оно работало!
Сразу скажу, из собственных программ механизм отражений я не тестировал. Мне хватило поведения Visual Studio. Итак...
Контрол TreeView (ох и глюкавый же он!), судя по описанию в MSDN имеет свойство Sorted. И он таки действительно его имеет. Более того, свойство это работает и даже полезным бывает. Для проверки существования можно создать простенькое приложение из одной формы с контролом TreeView на ней. В обработчик Load формы впишем что-нить типа MyTreeView.Sorted = true; и попробуем откомпилировать - все пройдет на ура.
Получается, что свойство все таки существует, хотя IntelliSense и окно Properties пытаются убедить нас в обратном. Кстати, как и просмотрщик объектов Object Browser (встроенный в Visual Studio 2005 вместо программы Class View, которая поставлялась с Visual Studio 2003), а уж он-то точно инфу тянет через отражение.
Выходит, что механизм отражений сбоит даже в среде разработки. А что же он будет творить в вашей реальной программе и к чему это может привести, думайте сами.
PS.
Это не единственное свойство, на котором спотыкается IntelliSense. Ранее я уже писал о свойстве AutoGenerateColumns контрола DataGridView, которое тоже является призраком, невидимым для IntelliSense. Теперь, видимо, настала пора собирать коллекцию таких невидимок. Если найду еще (а я уверен, что найду и не мало!), то буду дополнять список прямо в этой статье.
Дополнение (20:04)
По поводу свойства Sorted и метода Sort в контроле TreeView. В MSDN ни слова не сказано, что они как-то взаимосвязаны. Однако, как я только что убедился на практике, связь эта существует и она достаточно жесткая.
Итак, если свойство Sorted установлено в true, то метод Sort вызывается автоматически после каждого изменения в контроле.
Метод Sort в свою очередь автоматически устанавливает свойство Sorted в true, хотя об этом в MSDN не упоминается.
Вот такая вот загадочная контора microsoft....
MySQL: MyISAM хотят заменить на новый движок Maria
Инициативная группа MySQL AB Maria, состоящая из шести человек и возглавляемая Michael "Monty" Widenius (создатель MySQL и MyISAM), выпустила тестовую версию нового движка хранения данных Maria.
Движок Maria - это расширенная версия MyISAM, которая поддерживает весь основной функционал MyISAM и в дополнение к этому предлагает: поддержку восстановления данных после сбоев (data auto-recovery, crash safe), полное логирование (включая операции CREATE, DROP, RENAME и TRUNCATE) и новый формат строк PAGE.
Планируется, что движок Maria будет входить в стандартный пакет в версиях MySQL 6.X
Основные замечания касательно сравнения Maria и MyISAM
Преимущества перед MyISAM
- Восстановление данных и индексов после сбоев
- Откат, после сбоя, в предыдущее состояние или к состоянию после последней команды LOCK TABLES
- Полное логирование операций, включая: CREATE/DROP/RENAME/TRUNCATE TABLES, LOAD DATA INFILE, SELECT ... INSERT и INSERT (множество строк), ALTER TABLE
- LOAD INDEX может пропускать неиспользуемые индексные блоки
- Новый блочный формат строк, в котором данные хранятся ввиде страниц
- При использовании блочного формата строк (выбираемого теперь по умолчанию) строковые данные могут кешироваться
- Блочные тесты большинства элементов
- Поддержка как отказоустойчивых (crash safe, транзакциональных) так и нетранзакциональных таблиц. (Нетранзакцональные таблицы не логируются и для строк используется меньше места): CREATE TABLE foo (...) TRANSACTIONAL=0|1
- PAGE используется только для тказоустойчивого/транзакционального строкового формата
- PAGE формат должен дать заметное увеличение скорости на системах с плохим кешированием данных. (К примеру Windows)
Отличия от MyISAM
- Использование больших (1GB по умолчанию) лог файлов
- Использование контроля за логами (maria_log_control) и файлов логов (maria_log.???????). Файлы логов могут быть очищены автоматически, когда они уже больше не нужны, или по требованию (после бэкапирования).
- По умолчанию используются 8К страницы (MyISAM использует 1К). Maria будет работать быстрее на индексах с фиксированным размером, но медленнее на ключах с переменной длиной.
Устранение недостатков на ближайшее время
- В Maria 1.0 может быть один пишущий и много читающих (MyISAM может иметь одного добавляющего и много читающих, когда используются конкурирующие добавления записей).
- Не поддерживается INSERT DELAYED
- Не поддерживается кеширование составных ключей
Устранение недостатков до следующих релизов
- Хранение очень малых строк
- Не поддерживаются MERGE таблицы
Различия, которые вероятно не будут устранены
- Страницы данных в блоковом формате увеличивают размеры: 10 байт на страницу и 5 байт на строки. Транзакции и поддержка конкурирующих записей приведут к увеличению: 7 байт на новые строки, 14 байт для удаленных строк
- Отсутствие внешнего блокирования (MyISAM имеет внешнее блокирование, но оно редко используется)
- Использование одинакового размера страниц для индекса и данных. MyISAM поддерживает различные размеры страниц для индексов
- Индексный номер требует один экстра байт на индексную страницу
- Не поддерживается внутренний MySQL RAID (выключен и в MyISAM)
- Минимальный размер файла данных формата PAGE 16К (со страницей на 8K)
Обзор Maria:
http://forge.mysql.com/wiki/Maria_Preview
Документация Maria:
http://forge.mysql.com/wiki/Maria_Docs