簡體   English   中英

使用C#在Winforms中的內存性能

[英]Performance of memory in winforms with C#

在我打開SaveFileDialog之前,進程內存正在以21MB運行,而在打開SaveFileDialog之后,它會跳至42MB,即使關閉DialogBox之后,它也不會返回相同的值。 在此處輸入圖片說明

我不認為這是創建新對象的問題,因為在此過程的后期,我創建了更多的實例,並且內存完全沒有改變。 我對我有過的內存使用量有點擔心這個問題現在很長一段時間。

為什么會這樣呢? 還是VS中顯示的“進程內存”與表格的內存消耗有關系嗎? 這是我在對話框中的代碼

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!");
            }
        }
    }
}

我使該程序運行了幾個小時,而42MB的價值從未下降。

這是正常的,還可以。 它不是內存中的新對象。 相反,為了使用SaveFileDialog ,程序必須從系統中加載一些其他程序集。 因此,此新內存不是程序的操作內存或工作集的一部分,而是程序執行代碼本身的一部分。

除非系統處於實際的內存壓力下,否則該程序將不會自動卸載這些程序集,在這種情況下,其他東西確實需要該內存(或內存地址空間)。 畢竟,您可能會再次需要它們,而花一些時間卸載它們只會在程序發生時減慢速度。

這與鏈接的問題無關。 鏈接問題中的問題完全與安全性邊界有關,與使用過多內存無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM