ConfigurationManager. Проблемы производительности AppSettings

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

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

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
25
задан gmuraleekrishna 22 December 2017 в 10:12
поделиться

8 ответов

так как Вы используете приложение winforms, если это находится в .net 2.0 существует на самом деле пользовательская система настроек (названный Свойствами), который разработан с этой целью. Эта статья о MSDN имеет довольно хорошее введение в это

, Если Вы все еще волнуетесь по поводу производительности, затем смотрят на SQL Компактный Выпуск , который подобен SQLite, но является предложением Microsoft, которое я нашел играми очень приятно с winforms и существует даже способность к , заставляют его работать с Linq

10
ответ дан 28 November 2019 в 21:55
поделиться

Проверьте SQLite, он походит на хороший вариант для этого конкретного сценария.

2
ответ дан 28 November 2019 в 21:55
поделиться

Dylan,

не используют файл конфигурации приложения с этой целью, используют DB SQL (SQLite, MySQL, MSSQL, безотносительно), потому что необходимо будет волноваться меньше о проблемах параллелизма во время чтений и записей к файлу конфигурации.

у Вас также будет лучшая гибкость в типе данных, которые Вы хотите хранить. Раздел appSettings является просто списком ключа/значения, который можно перерасти как передачи времени и поскольку приложение назревает. Вы могли использовать пользовательские разделы конфигурации, но затем Вы в новую проблемную область когда дело доходит до дизайна.

2
ответ дан 28 November 2019 в 21:55
поделиться

appSettings действительно не предназначен, для какого Вы пытаетесь сделать.

, Когда Ваше приложение.NET запускается, оно читает в app.config файле и кэширует свое содержание в памяти. По этой причине после записи в app.config файл необходимо будет так или иначе вынудить время выполнения повторно проанализировать app.config файл, таким образом, это может кэшировать настройки снова. Это ненужное

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

Запрет использования базы данных, Вы могли легко установить внешний конфигурационный XML-файл. Когда Ваше приложение запускается, Вы могли кэшировать его содержание в объекте NameValueCollection или объекте HashTable. Поскольку Вы изменяетесь/добавляете настройки, Вы сделали бы это к той кэшируемой копии. Когда Ваше приложение закрывается, или в интервале подходящего времени, можно записать содержимое кэша обратно в файл.

2
ответ дан 28 November 2019 в 21:55
поделиться

Я не использовал бы файлы конфигурации для того, чтобы хранить пользовательские данные. Используйте дб.

1
ответ дан 28 November 2019 в 21:55
поделиться

Кто-то исправляет меня, если я неправ, но я не думаю, что AppSettings обычно предназначается, чтобы использоваться для подобных параметров конфигурации. Обычно Вы только вставили бы настройки, которые остаются довольно статичными (строки соединения с базой данных, пути к файлам, и т.д.). Если бы Вы хотите сохранить настраиваемые пользовательские настройки, было бы лучше создать отдельный предпочтительный файл или идеально сохранить те настройки в базе данных.

1
ответ дан 28 November 2019 в 21:55
поделиться

Я мог спросить, почему Вы не сохраняете настройки пользователя в базе данных?

Обычно я сохраняю параметры настройки приложения, которые изменяются очень нечасто в разделе appSettings (журналы ошибок адреса электронной почты по умолчанию отправляются в, число минут, после которых Вы автоматически выходитесь из системы, и т.д.) Объем этого действительно в приложении, не в пользователе, и обычно используется для настроек развертывания.

0
ответ дан 28 November 2019 в 21:55
поделиться

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

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

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

0
ответ дан 28 November 2019 в 21:55
поделиться
Другие вопросы по тегам:

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