ConfigurationManager. Кэширование AppSettings

Предупреждение: [fункция] ожидает, что параметр 1 будет ресурсом, boolean задан

(более общий вариант Предупреждение: mysql_fetch_array () ожидает, что параметр 1 будет resource, boolean given )

Ресурсы - это тип в PHP (например, строки, целые числа или объекты). Ресурс является непрозрачным блобом без собственной значимой ценности. Ресурс специфичен и определен определенным набором функций или расширений PHP. Например, расширение Mysql определяет два типа ресурсов :

В модуле MySQL есть два типа ресурсов. Первый - идентификатор ссылки для подключения к базе данных, второй - ресурс, который содержит результат запроса.

Расширение cURL определяет другой два типа ресурсов :

... дескриптор cURL и мультирум cURL.

Когда var_dump ed значения выглядят так:

$resource = curl_init();
var_dump($resource);

resource(1) of type (curl)

Это все большинство ресурсов - это числовой идентификатор ((1)) определенного типа ((curl)).

Вы переносите эти ресурсы и передаете их различным функциям, для которых такой ресурс что-то значит. Обычно эти функции выделяют определенные данные в фоновом режиме, а ресурс - это просто ссылка, которую они используют для отслеживания этих данных внутри.


«... ожидает, что параметр 1 будет ресурсом, логическим данная "ошибка, как правило, является результатом непроверенной операции, которая должна была создать ресурс, но вместо этого вернула false. Например, функция fopen имеет это описание:

Возвращаемые значения

Возвращает ресурс указателя файла при успешном выполнении или FALSE

Таким образом, в этом коде $fp будет либо resource(x) of type (stream), либо false:

$fp = fopen(...);

Если вы не операция fopen будет успешной или неудачной и, следовательно, будет ли $fp действительным ресурсом или false и передать $fp другой функции, которая ожидает ресурс, вы можете получить вышеуказанную ошибку:

$fp   = fopen(...);
$data = fread($fp, 1024);

Warning: fread() expects parameter 1 to be resource, boolean given

Вам всегда нужно проверять возвращаемое значение функций, которые пытаются выделить ресурс , и может выйти из строя :

$fp = fopen(...);

if (!$fp) {
    trigger_error('Failed to allocate resource');
    exit;
}

$data = fread($fp, 1024);

Связанные ошибки:

43
задан dove 6 December 2012 в 16:47
поделиться

5 ответов

Быстрый тест, кажется, показывает, что эти настройки только загружаются при запуске приложения.

//edit the config file now.
Console.ReadLine();

Console.WriteLine(ConfigurationManager.AppSettings["ApplicationName"].ToString());
Console.WriteLine("Press enter to redisplay");

//edit the config file again now.
Console.ReadLine();
Console.WriteLine(ConfigurationManager.AppSettings["ApplicationName"].ToString());
Console.ReadLine();

Вы будете видеть, что все выводы остаются тем же.

49
ответ дан ZombieSheep 26 November 2019 в 23:03
поделиться

Это читает файл конфигурации приложения (MyApp.exe.config) однажды при запуске приложения, как может легко быть проверен путем изменения файла, в то время как приложение работает.

комментарий в сообщении форума, на которое ссылается OP, был:

значения для Web.config хранятся в кэш/память, когда приложение запускается следовательно, почему приложение перезапускает, когда любые изменения внесены в web.config. Обратите внимание, что это только относится к Web.config, к любым другим .config файлам, которые можно использовать, получает доступ от диска значение по умолчанию

, я интерпретировал бы этот комментарий как то, чтобы подразумевать, что к файлам конфигурации кроме web.config в приложении ASP.NET получают доступ от диска по умолчанию. И точно так же к файлам конфигурации кроме MyApp.exe.config в приложении WinForms/Console получают доступ от диска по умолчанию.

Этот комментарий не указывает, что MyApp.exe.config читается из диска по умолчанию.

3
ответ дан Joe 26 November 2019 в 23:03
поделиться

Не имеет значения, если это делает или нет. Не решайте проблему производительности, если нет того.

2
ответ дан John Sonmez 26 November 2019 в 23:03
поделиться

Как John говорит, только проводят больше времени на этом, если Вы на самом деле видите хит производительности.

Также я вполне уверен, который эти приложения содержат конфигурация в памяти , и видеть любые изменения в конфигурации, которой приложение должно было бы быть , перезапустил .

Для [приблизительно 110] дополнительные материалы для чтения об остающихся тайнах.

2
ответ дан dove 26 November 2019 в 23:03
поделиться

приложение кэшируется. Вы можете улучшить производительность путем дальнейшего кэширования, чтобы ограничить поиск названия NameValueCollection.

См.: DOTNETPEARLS Статический шаблон конфигурации

2
ответ дан 26 November 2019 в 23:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: