Производительность чтения ключа реестра? - PullRequest
3 голосов
/ 14 октября 2010

Мне интересно, сколько времени (в миллисекундах) требуется для считывания значения реестра из реестра Windows через стандартные библиотеки C #. В этом случае я читаю в некоторых настройках прокси.

Какого порядка величины мне следует ожидать? Есть ли какие-либо хорошие данные для тестирования?

Я использую WS2k8 R2 и amd64. Бонусные баллы: Насколько влияет sku / версия ОС на эту меру?

 using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(@"Software/Copium")) 
 { 
      return (string)registryKey.GetValue("BinDir"); 
 } 

Ответы [ 2 ]

6 голосов
/ 14 октября 2010

Я не могу цитировать цифры, поскольку я не знаю. Но после прочтения 30 страниц в книге Windows Internals 5 о реестре выяснились следующие примечательные вещи, которые я не знал.

  • Реестр является транзакционным и имеет отказоустойчивые сейфы для предотвращения повреждения. Это может повлиять на производительность. Поскольку уровень транзакции считывается зафиксированным, чтение не должно блокироваться операциями записи, поэтому они должны быть производительными.

  • Реестр кэшируется в памяти (в любом случае, это часто используемые значения), поэтому при доступе к набору ключей часто производительность должна оставаться стабильной после первого обращения.

2 голосов
/ 14 октября 2010

Этот пост от Рэймонда Чена должен оказаться полезным: Затраты на чтение ключа реестра

Я бы добавил, что в целом не рекомендуется хранить настройки в реестре.для приложений C # используйте постоянное хранилище или файл конфигурации или что-то в этом роде.Есть проблемы, связанные с разрешениями, когда вы имеете дело с реестром.Чтение часто не является проблемой, но если вы собираетесь что-то сохранить, то оно становится проблематичным, особенно с UAC и более новыми операционными системами, которые скрывают копии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...