我正在使用WPF编写一个用C#编写的小书签管理应用程序.它只是位于系统托盘中,99%的时间处于空闲状态.最近我查看了任务管理器,发现它使用了大约25兆内存(并且在第一次激活之前大约12兆),我认为这对于一个大多数时间都没有做任何事情的应用来说有点多.这让我想知道是否有任何方法可以减少内存使用量,例如,禁用可选的WPF功能.
我发现了一个可能导致某些事情的事实,尽管我不知道如何利用它..NET中的线程每个大约需要1兆,而事实证明我的应用程序使用了大约6/12个线程(第一次激活之前和之后).这占我的内存使用量的一半,这是非常重要的.我不直接生成任何新线程,但我不知道WPF以及.NET的其他部分如何将线程用于不同的任务,所以我发现很难对它做任何事情.使用事件来处理与GUI没有直接关系的东西,这会产生新的线程吗?
所以我想我的问题是双重的,你如何减少.NET/WPF应用程序的内存使用量,如何最小化生成的线程数?请注意,我不是在考虑这些答案中提到的小细节,而是考虑如何在整个应用程序中设计低内存使用率.
不幸的是,根据我的经验,大约25MB是我见过的最小的WPF应用程序,至少在Windows XP上.我认为即使是空模板WPF应用也需要大约20MB.你在运行什么操作系统?
Windows Vista是一个更好的故事,你可以期望看到一个空模板WPF应用程序大约13-15MB.
对于你的应用程序使用6-12个线程,只使用~25MB,我会说你做得很好.:-)
如果它是一个系统托盘应用程序,您可以在WinForms(甚至C++)中实现该程序的那部分,并且只有当用户双击您的图标时才会生成WPF应用程序.这样,您只需在实际使用时支付内存.