【问题标题】:Process memory increasing after switching user切换用户后进程内存增加
【发布时间】:2014-09-16 23:21:28
【问题描述】:

我开发了一个在 Windows 上运行的应用程序。它使用 5 分钟计时器来启动与 Web 服务的连接并检查 DataTable 中的任何更新。

如果有任何更改 - 它会在客户端上弹出一个 WPF 窗口并显示一条消息。

该程序使用登录脚本在我们的域中运行,并使用用户帐户运行。

最近我们注意到一个问题,发现应用程序的进程在他们身上使用了超过 2GB 的内存,并且还在增加......

查了一下,发现问题所在:

该应用程序在 windows xp 和 windows 7 电脑上运行。 在 Windows 7 中,如果用户使用“切换用户”选项,第一个用户的进程继续运行,5 分钟计时器仍在运行。发生更改时会发生内存泄漏,并应显示一条消息

当我们停止计时器,然后使用“切换用户”时 - 没有问题,进程保持正常的内存使用。

我们能做什么?有什么建议?

谢谢!!

【问题讨论】:

    标签: wpf wcf memory windows-7


    【解决方案1】:

    我使用下面的方法来枚举当前用户。

    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
    

    如果不匹配 - 暂停实例。

    如果您有内存泄漏,则表明您的方法中也缺少 dispose。如果您最终有足够的实例来分配 2GB 内存,我会感到惊讶。

    P.S - 要求您添加对 System.Management 的引用

    【讨论】:

    • 完美地完成了这项工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    相关资源
    最近更新 更多