python 如何释放缓存?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 如何释放缓存?相关的知识,希望对你有一定的参考价值。

编写一个pyqt程序中,开始以后第一次加载大概 10秒,然后关了程序,以后再开都是0.5秒就加载完成,这样对于启动速度调试有很大影响,如何才能释放掉python的缓存?从而达到正常的启动速度?

我觉得可能是因为你的py文件在第一次启动后,已经编译成pyc文件了,再次启动的时候都是加载pyc,省去了编译的阶段,所以速度很快。
你可以试着把程序目录下的所有pyc或者你的代码文件对应的pyc文件删除,看看是不是可以和第一次加载速度相同
参考技术A 这不关缓存的事这是python自己的时 在linux下 很多程序都是这样的 包括java和qt 参考技术B 删除pyc文件 参考技术C 貌似是系统自动关内内存的吧,

如何在 Windows 7 中获取缓存和释放的物理内存量?

【中文标题】如何在 Windows 7 中获取缓存和释放的物理内存量?【英文标题】:How to get the amount of physical memory cached and free in Windows 7? 【发布时间】:2014-02-26 19:00:14 【问题描述】:

我正在尝试在 C# 中模仿 Windows 7 任务管理器(仅限性能选项卡),虽然我设法获得了大多数值,但我无法获得物理内存的缓存和空闲字节值。我知道它们的定义是:

缓存是指最近用于系统资源的物理内存量。 空闲是当前未使用或不包含有用信息的内存量(与缓存文件不同,缓存文件包含有用信息)。

但是我的方法都没有导致任务管理器中显示的确切值。例如:

缓存:

PerformanceCounter PC4 = new PerformanceCounter();
PC4.CategoryName = "Memory";
PC4.CounterName = "Cache Bytes";
PC4.InstanceName = "";
Console.WriteLine((Int32)(PC4.NextValue() / (1024 * 1024)));

免费:

ObjectQuery wql = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wql);
ManagementObjectCollection results = searcher.Get();
object ob = 0;
foreach (ManagementObject result in results)

  ob = result["FreePhysicalMemory"];
//returns physical memory's <i>Available</i> byte, NOT <i>Free</i>

我有什么遗漏吗?

【问题讨论】:

您在“缓存”括号中缺少更多计数器。像“备用缓存保留字节”。在 superuser.com 上询问这些是如何加起来的。 知道如何从 C# 的角度检索这些值吗? 【参考方案1】:

您可以尝试查看 System.Diagnostics.Process 类。 我认为 Process.PagedMemorySize 是您感兴趣的。 下面的代码示例会列出正在运行的进程及其内存使用情况:

Process[] processlist = Process.GetProcesses();

foreach(Process p in processlist)
    Console.WriteLine(“Process: 0 ID: 1 MEM:2”, p.ProcessName, p.Id, theprocess.PagedMemorySize);

如果 PagedMemorySize 不是一个尝试,可能是 VirtualMemorySize64

http://msdn.microsoft.com/en-us/library/system.diagnostics.process(v=vs.110).aspx

【讨论】:

Process中有很多与内存相关的属性,我对它们都不熟悉,所以你应该检查一下 我尝试总结每个进程的 WorkingSet64, ,NonpagedSystemMemorySize64, VirtualMemorySize64, PagedMemorySize64 和 PrivateMemorySize64 的数量(最后两个实际上返回相同的数字)。它们都不对应于 Cached 或 Free ram。【参考方案2】:

您需要添加对 Microsoft.VisualBasic 的引用才能使用以下内容:

using System.Runtime.InteropServices;
using Microsoft.VisualBasic.Devices;

public class MemStat

    public ulong Available  get; set; 

    public ulong Total  get; set; 

    public ulong PhysicalMemoryInUse  get; set; 

    public ulong Free  get; set; 

    public ulong Cached  get; set; 

    public MemStat()
    
        ObjectQuery wql = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");

        ManagementObjectSearcher searcher = new ManagementObjectSearcher(wql);

        ManagementObjectCollection results = searcher.Get();

        var Available = new ComputerInfo().AvailablePhysicalMemory;

        this.Available = Available;

        var Total = new ComputerInfo().TotalPhysicalMemory;

        this.Total = Total;

        var PhysicalMemoryInUse = Total - Available;

        this.PhysicalMemoryInUse = PhysicalMemoryInUse;

        Object Free = new object();

        foreach (var result in results)
        
            Free = result["FreePhysicalMemory"];

            this.Free = ulong.Parse(Free.ToString());

        

        var Cached = Total - PhysicalMemoryInUse - ulong.Parse(Free.ToString());

        this.Cached = Cached;

    

然后像这样使用它:

        ulong TotalMemory = new MemStat().Total;
        ulong FreeMemory = new MemStat().Free;

        Console.BackgroundColor = ConsoleColor.Blue;
        Console.ForegroundColor = ConsoleColor.Cyan;
        Console.WriteLine("    **** MY WINDOWS PROGRAM ****     ");
        Console.WriteLine("" + (TotalMemory/1024) + "K RAM SYSTEM " + FreeMemory + " BYTES FREE");

【讨论】:

以上是关于python 如何释放缓存?的主要内容,如果未能解决你的问题,请参考以下文章

如何清理 Safari 缓存释放空间

如何在 Windows 7 中获取缓存和释放的物理内存量?

android如何释放图片缓存

如何手动释放Linux内存?

linux服务器如何查看内存,释放内存和缓存

如何为linux释放内存和缓存