【问题标题】:How to reduce the memory usage of my app in C# [duplicate]如何在 C# 中减少我的应用程序的内存使用量 [重复]
【发布时间】:2022-01-22 22:35:51
【问题描述】:

我正在构建一个小程序来检查资源监视器是否打开,如果是,则关闭它。

bool a = true;
while (a == true)
{
    foreach (var p in Process.GetProcessesByName("perfmon"))
    {
        Process.Start("taskkill", "/F /IM perfmon.exe");

        // "perfmon" "Taskmgr"
        foreach (var t in Process.GetProcessesByName("taskkill"))
        { 
             ... 
        }
    }
}

问题是它占用了我近 30% 的 CPU 性能,那么如何降低 CPU 使用率呢?

我还尝试添加其他程序,例如任务列表和任务管理器,但没有成功,您有什么想法吗? :

bool a = true;
            while (a == true)
            {
                System.Threading.Thread.Sleep(1000);
                foreach (var p in Process.GetProcessesByName("Taskmgr"))
                {
                    Process.Start("taskkill", "/F /IM Taskmgr.exe");

                    // "perfmon" "Taskmgr"
                    foreach (var t in Process.GetProcessesByName("taskkill"))

                    {
                        System.Threading.Thread.Sleep(60000);

                        Process b = Process.Start("");
                    }
                }

                foreach (var p1 in Process.GetProcessesByName("perfmon"))
                {
                    foreach (var t1 in Process.GetProcessesByName("taskkill"))

                    {
                        System.Threading.Thread.Sleep(60000);

                        Process b1 = Process.Start("");
                    }

                }

                foreach (var p2 in Process.GetProcessesByName("tasklist"))
                {
                    foreach (var t2 in Process.GetProcessesByName("taskkill"))

                    {
                        System.Threading.Thread.Sleep(60000);

                        Process b2 = Process.Start("");
}
}

【问题讨论】:

  • 这能回答你的问题吗? CPU friendly infinite loop
  • 问题标题和正文不匹配。您可能应该更新标题,明确您询问的是 CPU 使用率而不是内存。
  • 您是否考虑过在 Windows 本身中使用机器策略来禁用任务管理器的打开,而不是编写程序在看到它时将其关闭。 social.technet.microsoft.com/Forums/ie/en-US/…
  • 我不想禁用任务管理器,Process.Start("taskkill", "/F /IM perfmon.exe");可以替换为 Process.Start("taskkill", "/F /IM chrome.exe");或者什么

标签: c# memory memory-management cpu-usage


【解决方案1】:

在您的 while 循环中添加 Sleep()

System.Threading.Thread.Sleep(1000);

您的程序会不断检查您 PC 上的所有进程。如果是这样,每秒只有一次,那就绰绰有余了。

【讨论】:

  • 我之前尝试过,但没有成功,但现在可以了,谢谢。但是当我检查我有足够的时间来查看我的其他程序(已关闭)并且因为它需要超过 0% 时,我的程序在任务管理器中位于顶部。我检查了那个链接stackoverflow.com/questions/7402146/cpu-friendly-infinite-loop你认为我可以在我的程序中介绍它吗? (我知道这有点助人为乐,抱歉)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 2010-09-28
  • 2020-12-24
  • 2018-03-06
  • 1970-01-01
相关资源
最近更新 更多