常用的测试与提升性能方法

一、查看内存消耗

(一) tracemalloc.start()

import tracemalloc


"""
    跟踪内存消耗
"""
tracemalloc.start()  # 开始跟踪
# pla_1 = [Player(1,2,3) for _ in range(10000)]       # size=1726 KiB  __dict__
pla_2 = [Player2(1, 2, 3) for _ in range(10000)]  # size=711 KiB

snapshot = tracemalloc.take_snapshot()  # 快照 当前内存分配
top = snapshot.statistics("filename")  # 快照对象统计 监测文件

for start in top[:10]:
    print(start)

(二)psutil

import os
import psutil

def show_info(start):
    # 获取当前进程id
    pid = os.getpid()

    # 获取当前堆成对象
    p = psutil.Process(pid)

    # 返回该对象的内存消耗
    info = p.memory_full_info()

    # 获取进程独自占用的物理内存 换算单位 MB
    memory = info.uss/1024./1024
    print(f"{start}一共占用{memory:.2f}MB")


def func():
    show_info("initial")
    # 因为a是局部变量 局部变量在函数执行完毕 引用就会注销
    a = [i for i in range(1000000)]   # 列表推导式 [0~9999999]
    show_info("created")

二 提升性能

(一)__new__单例模式

定义

  • __new__是用来创建并返回对象,所以我们可以利用它来修改创建对象的行为

实现前提

  • 重写 __new__方法
    • 要对object基类自带的__new__函数进行修改,使其不会每次实例化都会自动创建一个对象
    • __new__比__init__先执行,只有对象创建了,才会自动调用初始化方法
    • 必须用return将对象返回出来
    • 要继承父类,因为我们重写只是增加部分功能,真正创建对象的代码复杂,不是写一个函数定义就能创建的,复杂的也不需要我们重写,直接继承基类自带的继承功能就行

实现

  • 对自动创建对象的__new__魔法方法进行重写
    • 添加条件语句:
      当对象不存在时,创建对象
      当对象存在时,永远返回当前已经创建对象
    • 继承<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洋芋本人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值