Проблема производительности с зашифрованным файлом app.config - PullRequest
1 голос
/ 19 мая 2011

Я работаю над приложением, в котором мы по ряду причин решили, что файл app.config должен быть зашифрован.Мы используем SectionInformation.ProtectSection с RsaProtectedConfigurationProvider для шифрования всех разделов.Эта часть работает нормально, и приложение может читать зашифрованную информацию.Мой вопрос с этим подходом о производительности.Я столкнулся с проблемой нагрузочного тестирования нашего приложения, где использование зашифрованного конфига почти в 2 раза медленнее под нагрузкой, чем с незашифрованным конфигом.Так, когда мое приложение запускается, конфигурация становится незашифрованной и кэшируется в памяти или нет?Или это на самом деле идет на диск каждый раз?Я много занимался поиском и не нашел однозначного ответа на то, что именно здесь происходит.Спасибо за вашу помощь!

Я хотел бы добавить, что это приложение использует свойство connectionString для доступа к БД.

Ответы [ 3 ]

2 голосов
/ 19 мая 2011

Я сделал быстрый тест, и похоже, что он загружен в память. Ниже приведен код, который я запустил. После первой WriteLine () я открыл конфигурацию, вручную изменил ее и сохранил файл конфигурации. Вторая функция WriteLine () распечатывает старое значение, а не новое, поэтому я пришел бы к выводу, что он не открывает файл обратно после его однократного чтения.

static void Main(string[] args)
{
    Console.WriteLine(ConfigurationManager.AppSettings("TestSettings"));
    Console.ReadLine();
    //Before hitting return I changed the value of TestSettings manually
    Console.WriteLine(ConfigurationManager.AppSettings("TestSettings"));
    Console.ReadLine();
}
0 голосов
/ 22 мая 2011

Хорошо, я нашел ответ на свой вопрос.Как оказалось, снижение производительности с зашифрованной конфигурацией связано с ошибкой в ​​коде платформы нашего решения.По сути, был оставленный код от того, что мы пытались реализовать, который открывал конфигурацию с диска каждый раз, когда мы обращались к строке подключения или к любому параметру приложения:

var config = ConfigurationManager.OpenMappedExeConfiguration()

Я изменил этот код, чтобы просто использоватьConfigurationManager.AppSettings[] и теперь все работает отлично.Итак, я обнаружил, что ConfigurationManager читает с диска при первом обращении к свойству, а также дешифрует файл только в первый раз.После этого он просто читает значения из расшифрованных разделов в памяти.

0 голосов
/ 19 мая 2011

Вы можете попробовать следующее:

http://www.dotnetprofessional.com/blog/post/2008/03/03/Encrypt-sections-of-WebConfig-or-AppConfig.aspx

трудно превзойти это исполнение

...