Производительность памяти в winforms с C # - PullRequest
0 голосов
/ 11 июня 2018

Перед открытием SaveFileDialog Память процесса работает на 21 МБ, а после открытия SaveFileDialog она увеличивается до 42 МБ, и даже после закрытия DialogBox она не возвращается к тому же значению.enter image description here

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

Почему это происходит? или Связана ли эта «память процесса», показанная в VS, с потреблением памяти в форме? Вот мой кодвнутри DialogBox

private void textBox4_Click(object sender, System.EventArgs e)
{
    using(SaveFileDialog saveFileDialog1 = new SaveFileDialog())
    {
        saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
        saveFileDialog1.FilterIndex = 2;
        saveFileDialog1.AddExtension = true;
        saveFileDialog1.RestoreDirectory = true;
        saveFileDialog1.DefaultExt = "txt";
        saveFileDialog1.CreatePrompt = true;

        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            saveFileDialog1.CheckFileExists = true;
            textBox4.Text = saveFileDialog1.FileName;
            filename = saveFileDialog1.FileName;
            try
            {
                using(StreamWriter s = new StreamWriter(filename))
                {
                    s.WriteLine(header);
                    s.Flush();
                }
            }
            catch (IOException)
            {
                MessageBox.Show("File is not accessible!");
            }
        }
    }
}

Эта программа работала в течение нескольких часов, и значение 42 МБ никогда не снижалось.

1 Ответ

0 голосов
/ 11 июня 2018

Это нормально и хорошо.Это не новый объект, сидящий в памяти.Вместо этого, чтобы использовать SaveFileDialog, программе пришлось загрузить из системы несколько дополнительных сборок.Таким образом, эта новая память не является частью оперативной памяти программы или рабочего набора ... она является частью самого исполняющего кода программы.

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

Это не связано со связанным вопросом.Проблема в вопросе о ссылке полностью связана с границами безопасности и не связана с использованием слишком большого объема памяти.

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