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 如何释放缓存?的主要内容,如果未能解决你的问题,请参考以下文章