清除c#中其他软件的垃圾内存

本文关键字:内存 软件 其他 清除 | 更新日期: 2023-09-27 18:27:57

这是一个奇怪的问题。在我的工作中,我使用了一个软件(没有人可以修改或查看源代码),不幸的是,这个软件非常糟糕。它在推出时使用大约1 gb的RAM,但在运行和使用时,它会在RAM中积累数据,几个小时后它会占用超过4gb的RAM,如果不停止,积累的数据会越来越多。由于不是我公司的所有电脑都能处理这个问题,所以它们崩溃了。有没有办法从c#中的其他软件编程中清除ram中未使用的数据?我只需要一个提示,我用c#编程。我为我的英语感到抱歉,如果这个问题有错的话。谢谢你抽出时间。

编辑:我会添加一些关于这个软件的信息,更好地了解我能做什么,不能做什么。由于我不会从破解这个软件中获得任何好处,但我会过上更好的生活(不仅是我,还有我的同事和员工),我认为破解这个软件没有任何问题。(好吧,我的首领没有问题,他的首领也是)。我会尝试Arunasr提示,我用c#编程,知道这个函数。我只需要反编译它。我必须删除这个问题吗?感谢您给我的所有回复和帮助。

清除c#中其他软件的垃圾内存

除了杀死并重新启动任务之外,没有其他方法。如果是Windows服务,您可以使用Powershell、命令行实用程序SC.exe或此c#代码:

public static void RestartService(string serviceName, int timeoutMilliseconds)
{
  ServiceController service = new ServiceController(serviceName);
  try
  {
    int millisec1 = Environment.TickCount;
    TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
    service.Stop();
    service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
    // count the rest of the timeout
    int millisec2 = Environment.TickCount;
    timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2-millisec1));
    service.Start();
    service.WaitForStatus(ServiceControllerStatus.Running, timeout);
  }
  catch
  {
    // ...
  }
}

参考:http://www.csharp-examples.net/restart-windows-service/

.NET运行时垃圾收集器往往是惰性的,只有在可用内存即将耗尽时才会收集。您可以使用GC.Collect()强制进行垃圾收集,但要注意性能:如果经常这样做,成本会很高。

如果库真的积累了数据(即数据仍然是引用,GC无法触及它),那么除了破解库、找出消耗内存的东西并释放不必要的对象之外,你几乎没有什么可做的了。反编译.NET字节码并不困难。在极端情况下,您可以在加载程序集字节码后使用反射来修改它。除非你绝望,否则我不会推荐你。

您可以使用GC来跟踪实际内存使用情况统计信息。