我有一个定期执行某些操作的windows服务。在用户帐户上运行与windows服务(通过.net remoting)通信的systray应用程序(用C#编写),并向用户显示状态和一些选项。
除了systray应用程序使用20-30MB的RAM之外,一切都运行得很好!它必须在终端环境下工作,当50个用户登录时,只有systray应用程序占用>1 1GB的RAM!我不需要补充,这是错误的:)
是否可以编写小的.net systray应用程序?(最大1-2MB?)或者我应该用c/c++编写它?那么,我应该在windows服务(用C#编写)和systray应用程序之间使用哪种通信方式?
发布于 2010-06-09 17:16:19
我在代码中添加了下面这行代码(应用程序有时会将其与GC.Collect()一起调用)
System.Diagnostics.Process.GetCurrentProcess().MaxWorkingSet =
System.Diagnostics.Process.GetCurrentProcess().MinWorkingSet;内存使用量下降到~2MB (从15-25MB),在使用后清空一些对象(绘图菜单和图标)后,内存使用量下降到~540KB!它会有一点增长(如果我使用上下文菜单,它会增长到~2-3MB,但随后会回落到~540KB)
因此,目标实现了:)
发布于 2010-05-20 20:10:06
另一个注意事项是,.NET应用程序消耗的大量内存位于共享(.NET) dll中,并且在运行多个实例时不会重复(除非操作系统使用随机的dll加载地址)。
您还可以通过将程序集安装到GAC并使用ngen对其进行预JIT编译来减少JIT编译所使用的内存。同样,这将导致内存使用量减少,除非操作系统随机化dll加载地址。
发布于 2010-05-20 19:52:11
您遇到的内存使用问题很可能是特定于您的应用程序的,而不是所有使用.NET构建的系统托盘应用程序。
您应该分析您的应用程序,以确定发生大内存使用的位置。
https://stackoverflow.com/questions/2873325
复制相似问题