Zmniejszenie wykorzystania pamięci przez aplikacje .NET?

Jakie są wskazówki dotyczące zmniejszenia wykorzystania pamięci przez aplikacje .NET? Rozważmy następujący prosty program C #.

class Program
{
    static void Main(string[] args)
    {
        Console.ReadLine();
    }
}

Wbudowanywydanie tryb dlax64 i działając poza Visual Studio, menedżer zadań zgłasza następujące informacje:

Working Set:          9364k
Private Working Set:  2500k
Commit Size:         17480k

Jest trochę lepiej, jeśli jest skompilowany tylko dlax86:

Working Set:          5888k
Private Working Set:  1280k
Commit Size:          7012k

Następnie wypróbowałem następujący program, który robi to samo, ale próbuje przyciąć rozmiar procesu po inicjalizacji w czasie wykonywania:

class Program
{
    static void Main(string[] args)
    {
        minimizeMemory();
        Console.ReadLine();
    }

    private static void minimizeMemory()
    {
        GC.Collect(GC.MaxGeneration);
        GC.WaitForPendingFinalizers();
        SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle,
            (UIntPtr) 0xFFFFFFFF, (UIntPtr)0xFFFFFFFF);
    }

    [DllImport("kernel32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool SetProcessWorkingSetSize(IntPtr process,
        UIntPtr minimumWorkingSetSize, UIntPtr maximumWorkingSetSize);
}

Wyniki nax86 Wydanie poza Visual Studio:

Working Set:          2300k
Private Working Set:   964k
Commit Size:          8408k

Co jest trochę lepsze, ale nadal wydaje się przesadne w przypadku tak prostego programu. Czy są jakieś sztuczki, aby proces C # był nieco szczuplejszy? Piszę program, który przez większość czasu działa w tle. Robię już wszystkie elementy interfejsu użytkownika w osobnymDomena aplikacji co oznacza, że ​​elementy interfejsu użytkownika mogą być bezpiecznie wyładowane, ale zajmowanie 10 MB, gdy tylko siedzi w tle, wydaje się nadmierne.

P.S. Jeśli chodzi o to, dlaczego miałbym się tym przejmować - użytkownicy (Power) zwykle martwią się o te rzeczy. Nawet jeśli nie ma to prawie żadnego wpływu na wydajność, użytkownicy znający się na pół-techach (moi odbiorcy docelowi) zwykle wpadają w szał na temat użycia pamięci w tle aplikacji. Nawet dziwię się, gdy widzę Adobe Updater pobierający 11 MB pamięci i uspokajający uspokajającym dotykiem Foobar2000, który może zabrać nawet 6 MB nawet podczas grania. Wiem w nowoczesnych systemach operacyjnych, że to naprawdę nie ma znaczenia technicznie, ale to nie znaczy, że nie ma wpływu na percepcję.

questionAnswers(9)

yourAnswerToTheQuestion