2015-06-12 3 views
1

Я хочу сохранить некоторые изменения пользовательского интерфейса, когда программа закрывается. Я читал, что один из самых простых способов сделать это - с настройками. Я решил, что сохраню эти изменения в настройках всякий раз, когда программа закрывается, вместо сохранения ее каждый раз, когда пользователь меняет эти параметры. Итак, у меня есть следующее:C# - Settings.Default.Save() очень медленный

 private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     Properties.Settings.Default.PostProcessSubs = checkBox_PPSubs.Checked; 
     Properties.Settings.Default.Save(); 
    } 

Это только сохраняет, включен ли этот флажок по умолчанию. Однако, когда у меня это есть, приложение зависает на секунду или два, когда я нажимаю X, чтобы закрыть его. Если я закомментирую команду save(), она закрывается нормально, но, конечно, изменения не сохраняются. Кроме того, все работает нормально, поэтому я нахожу довольно странным, что этот процесс настолько медленный.

BTW, мои настройки не раздуты или что-то еще, у меня есть только два булина и две маленькие строки.

Редактировать: Это происходит только при запуске корыта «Старт без отладки». Запуск прогона отладки или прошивки работает нормально. Довольно странно.

Edit2: no, все еще случается. Медленно, как черт.

+2

Вы проверили местоположение сохраненного файла настроек? Это на сетевом диске или на некоторых более медленных носителях? – sstan

+1

Возможно, CLR немного вписал код. Если вы выполняете второе сохранение в том же запуске программы, это быстрее или нет? – xanatos

+2

Сериализация XML не слишком быстра, но нет никакого сценария, когда она может стоить 4 миллиарда циклов процессора, когда вы делаете это повторно. Это экологическая проблема. Дело 90% - это crapware, который программисты добровольно устанавливают на своей машине, который всегда получает свое нижнее белье в связке в любом XML-файле. Отключите антивирусную программу и повторите попытку. И учитывайте только сохранение, когда ваша программа завершается, сохраняя в тот момент, когда изменения настроек опасны. Если изменение заставляет вашу бомбу бомбить, у вас будут хорошие шансы, что она будет бомбить навсегда. –

ответ

0

Хорошо, я решил это, и я чувствую отсталость. Но вот указатель, если у кого-то есть аналогичная проблема. Итак, что случилось, мой конфигурационный файл был 16 МБ. Зачем? Ну, один из конфигураций - это путь исполняемого файла. Однако код, который я использовал для этого исполняемого файла, был неправильным, поскольку я скопировал его, не задумываясь о другой части моей программы. Я это ... это печально

Properties.Settings.Default.ProgramPath = 
System.IO.File.ReadAllText(openFileDialog1.FileName.ToString()); 

Когда очевидно, что это должно быть только что

Properties.Settings.Default.ProgramPath = 
openFileDialog1.FileName.ToString(); 

Конечно, исходный код я был преобразованием всего исполняемого файла в текст, и сохранение его в файл конфигурации. Конфигурационный файл раздулся, и даже если я больше не использовал эту часть кода, файл конфигурации уже раздулся. Таким образом, всякий раз, когда я сохранял какую-либо другую конфигурацию, вместо сохранения файла с несколькими килобайтами он сохранял файл размером 16 МБ. Каждый раз. Итак, да ...

TLDR: Проверьте размер вашего конфигурационного файла ... по какой-то причине может быть вздуто.

Смежные вопросы