我开发了一款在Windows上运行的应用。它使用5分钟的计时器来启动与Web服务的连接,并检查DataTable中的任何更新。
如果有任何更改 - 它会弹出客户端上的WPF窗口并显示一条消息。
该程序使用登录脚本在我们的域中运行,并使用用户帐户运行。
最近我们注意到了一个问题,并发现应用程序的过程中使用了超过2GB的内存,并且还在增加......
在查找之后,我们发现了问题:
该应用程序在Windows XP和Windows 7上运行。 在Windows 7中,如果用户使用"切换用户"选项,第一个用户的进程继续运行,5分钟计时器仍在运行。当发生变化时,内存泄漏就会发生,并且应该显示一条消息。
当我们停止计时器,然后使用"切换用户" - 没有问题,并且该过程保持正常的内存使用。
我们能做什么?有什么建议?
谢谢!
答案 0 :(得分:0)
我使用以下方法枚举当前用户。
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
foreach (var user in collection.Cast<ManagementBaseObject>())
{
Console.WriteLine(user["UserName"]);
}
如果您使用此功能并与之比较,它可能适用于您的应用
System.Security.Principal.WindowsIdentity.GetCurrent().Name
如果不匹配 - 暂停实例。
如果您有内存泄漏,则表明您的方法中也存在丢失的情况。如果您最终有足够的实例来支持2GB内存分配,我会感到惊讶。
P.S - 要求您添加对System.Management的引用