Я работаю над небольшим приложением для управления закладками, написанным на C #, с использованием WPF. Он просто сидит в системном трее и простаивает 99% времени. Недавно я заглянул в диспетчер задач и обнаружил, что он использует около 25 мегабайт памяти (и около 12 мегабайт до того, как он активируется в первый раз), что, как мне показалось, было довольно много для приложения, которое практически ничего не делает. Это заставило меня задуматься, есть ли какие-либо способы уменьшить использование памяти, например, отключив дополнительные функции WPF.
Я обнаружил один факт, который может привести к чему-то, хотя я не знаю, как это использовать. Потоки в .NET занимают примерно один мег каждый, и оказывается, что мое приложение использует около 6/12 потоков (до и после активации в первый раз). Это составляет половину моего использования памяти, что довольно существенно. Я не создаю новые потоки напрямую, но понятия не имею, как WPF, как и другие части .NET, использует потоки для различных задач, поэтому мне сложно что-либо с этим делать. Используя события для вещей, которые не связаны напрямую с GUI, это, например, порождает новые потоки?
Итак, я думаю, мой вопрос двоякий, как вы можете уменьшить использование памяти приложениями .NET / WPF в целом и как вы можете минимизировать количество порождаемых потоков? Обратите внимание, что я не столько задумываюсь над мелкими деталями, как те, что приведены в в этом ответе , но скорее над тем, как спроектировать для низкого использования памяти во всем приложении.