Memory Profiler

写一手漂亮的代码,走向极致的编程 二、代码运行时内存分析

谁说我不能喝 提交于 2020-10-25 17:52:23
前言 上篇 文章 中介绍了如何对代码性能进行分析优化,这篇文章将介绍如何对代码运行时内存进行分析。 说到内存,就想起之前在搞数据挖掘竞赛的时候,往往要跑很大的数据集,经常就是炸内存。当时的解决办法就是对着任务管理器用 jupyter notebook 分 cell 的跑代码,将需要耗费大量内存的代码块找出来,然后考虑各种方式进行优化。 这篇文章将会介绍些更好的方法,来对代码运行时内存进行分析,通过这些方法了解了代码的内存使用情况之后,我们可以思考: 能不能重写这个函数让它使用更少的 RAM 来工作得更有效率 我们能不能使用更多的 RAM 缓存来节省 CPU 时间 开始分析 代码仍采用上篇文章中的 memory_profiler 通过 pip install memory_profiler 来安装这个库。在需要进行分析的函数前加上修饰器 @profile from memory_profiler import profile ... ... @profile def calculate_z_serial_purepython(maxiter, zs, cs): ... @profile def calc_pure_python(desired_width, max_itertions): ... ... 然后命令行输入 python -m memory_profiler code

Android 10系统下的PSS数值统计不准

旧巷老猫 提交于 2020-08-20 06:50:45
1)Android 10系统下的PSS数值统计不准 ​2)Memory Profiler中的类型内存大小计算 3)Addressable加载Bytes文件在手机上报错 4)使用SBP打Bundle,如何读取AssetBundleManifest 5)GameObject如何释放从Bundle中加载的Asset 这是第215篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。 UWA 问答社区: answer.uwa4d.com UWA QQ群2:793972859(原群已满员) Memory Q:从下图测试的结果来看,Android 10.0的PSS的内存值是平的,没有任何变化。但如果用Android 9.0版本的测试机测试,数值就是正常。初步猜测这个就是Android 10的内存反馈,但到底是否为Bug还不确定。有遇到相同情况的小伙伴吗? A:同样被Android 10坑了,来回答一下原因: ActivityManager的 public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids) 变了。 /** <p>As of {@link android.os.Build.VERSION_CODES#Q Android Q}, for regular apps

总结 90 条写 Python 程序的建议 用“强迫症”维持代码质量

筅森魡賤 提交于 2020-08-15 17:39:39
阅读本文大概需要 3 分钟。 ” 本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我删除。 自己写 Python 也有四五年了,一直是用自己的“强迫症”在维持自己代码的质量。都有去看 Google 的 Python 代码规范,对这几年的工作经验,做个简单的笔记,如果你也在学 Python,准备要学习 Python,希望这篇文章对你有用。 1. 首先 建议1、理解 Pythonic 概念—-详见 Python 中的《Python之禅》 建议2、编写 Pythonic 代码 (1)避免不规范代码,比如只用大小写区分变量、使用容易混淆的变量名、害怕过长变量名等。有时候长的变量名会使代码更加具有可读性。 (2)深入学习 Python 相关知识,比如语言特性、库特性等,比如Python演变过程等。深入学习一两个业内公认的 Pythonic 的代码库,比如Flask等。 建议3:理解 Python 与 C 的不同之处,比如缩进与 {},单引号双引号,三元操作符?, Switch-Case 语句等。 建议4:在代码中适当添加注释 建议5:适当添加空行使代码布局更加合理 建议6:编写函数的 4 个原则 (1)函数设计要尽量短小,嵌套层次不宜过深 (2)函数声明应该做到合理、简单、易用 (3)函数参数设计应该考虑向下兼容 (4)一个函数只做一件事,尽量保证函数粒度的一致性 建议7

总结了 90 条写 Python 程序的建议

别说谁变了你拦得住时间么 提交于 2020-08-14 03:24:43
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 来源丨 恋习Python https://mp.weixin.qq.com/s/6Oy0IzWepqILG0VSbLTczw 本文于网络整理,版权归原作者所有 这是一名5年经验的 Python小伙伴总结的90条python建议,如果你也在学pythpn,准备要学习python,希望这篇文章对你有用。 1. 首先 建议1、理解Pythonic概念—-详见Python中的《Python之禅》 建议2、编写Pythonic代码 (1)避免不规范代码,比如只用大小写区分变量、使用容易混淆的变量名、害怕过长变量名等。有时候长的变量名会使代码更加具有可读性。 (2)深入学习Python相关知识,比如语言特性、库特性等,比如Python演变过程等。深入学习一两个业内公认的Pythonic的代码库,比如Flask等。 建议3:理解Python与C的不同之处,比如缩进与{},单引号双引号,三元操作符?,Switch-Case语句等。 建议4:在代码中适当添加注释 建议5:适当添加空行使代码布局更加合理 建议6:编写函数的4个原则 (1)函数设计要尽量短小,嵌套层次不宜过深 (2)函数声明应该做到合理、简单、易用 (3)函数参数设计应该考虑向下兼容

编写高质量代码 改善 Python 程序的 91 个建议

雨燕双飞 提交于 2020-08-10 22:42:42
本文内容全部由 Python 编码的最佳实践组成,从基本原则、惯用法、语法、库、设计模式、内部机制、开发工具和性能优化 8 个方面深入探讨了编写高质量 Python 代码的技巧与禁忌,一共总结出 91 条宝贵的建议。每条建议对应 Python 程序员可能会遇到的一个问题。 建议1:理解Pythonic概念 建议2:编写Pythonic代码 建议3:理解Python与C语言的不同之处 建议4:在代码中适当添加注释 建议5:通过适当添加空行使代码布局更为优雅、合理 建议6:编写函数的4个原则 建议7:将常量集中到一个文件 建议8:利用assert语句来发现问题 建议9:数据交换值的时候不推荐使用中间变量 建议10:充分利用Lazy evaluation的特性 建议11:理解枚举替代实现的缺陷 建议12:不推荐使用type来进行类型检查 建议13:尽量转换为浮点类型后再做除法 建议14:警惕eval()的安全漏洞 建议15:使用enumerate()获取序列迭代的索引和值 建议16:分清=与is的适用场景 建议17:考虑兼容性,尽可能使用Unicode 建议18:构建合理的包层次来管理module 建议19:有节制地使用from…import语句 建议20:优先使用absolute import来导入模块 建议21:i+=1 不等于 ++i 建议22:使用with自动关闭资源 建议23

关于UGUI滚动列表的疑问

假如想象 提交于 2020-08-04 10:40:05
1)关于UGUI滚动列表的疑问 2)iOS手机上设置静音键后仍旧播放声音 3)关于ShadowMap的渲染开销问题 4)使用Xcodebuild自动化打出IPA包 5)APK内Assets目录占用过大 这是第205篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。 UWA 问答社区: answer.uwa4d.com UWA QQ群2:793972859(原群已满员) UGUI Q:在UGUI的滚动列表中,怎么实现在纵向大列表的子物体里的列表横向滚动? A:提供一种思路: 子物体重写ScrollRect里面的OnBeginDrag/OnDrag/OnEndDrag方法,判断手势滑动的方向,如果不符合期望的方向,转发事件给父级ScrollRect。 实现效果如图: Demo相关代码可以通过 原链接 获取。 感谢张迪@UWA问答社区提供了回答,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5ecdc6c7979400061e545396 Audio Q:我们项目使用FMOD播放音频,在iOS手机包上开启了物理静音开关后,游戏音频依然可以播放,没有被静音。大家有遇到过相同的问题吗? A:关闭Unity Audio试试,在Project Settings中。 感谢王欢

蠎周刊422 ~ 超现代 Python 开发环境配置

∥☆過路亽.° 提交于 2020-07-28 04:27:46
Title: Issue 422 Slug: issue-422 Date: 2020-05-20 11:42 Tags: Weekly,Python,pycoders,ZH 超现代 Python 开发环境配置 原文: PyCoder's Weekly - Issue #422 200527 Zoom.Quiet (大妈) 用时 42 分钟 完成快译 200527 Zoom.Quiet (大妈) 用时 37 分钟 完成格式转抄. 在异步中等待 HYNEK SCHLAWACK There are many ways to wait on the results of a coroutine in Python’s asyncio framework. They all have different properties and use cases. In this article, they’ve all been collected in one place to help you figure out which one you need. 异步 Python 中的延迟 CHRTIS WELLONS Where does latency in asynchronous programs come from? Explore some common mistakes in

Python使用Zero-Copy和Buffer Protocol实现高性能编程

ε祈祈猫儿з 提交于 2020-04-22 05:06:33
无论你程序是做什么的,它经常都需要处理大量的数据。这些数据大部分表现形式为strings(字符串)。然而,当你对字符串大批量的拷贝,切片和修改操作时是相当低效的。为什么? 让我们假设一个读取二进制数据的大文件示例,然后将部分数据拷贝到另外一个文件。要展示该程序所使用的内存,我们使用 memory_profiler ,一个强大的Python包,让我们可以一行一行观察程序所使用的内存。 @profile def read_random(): with open("/dev/urandom", "rb") as source: content = source.read(1024 * 10000) content_to_write = content[1024:] print(f"content length: {len(content)}, content to write length {len(content_to_write)}") with open("/dev/null", "wb") as target: target.write(content_to_write) if __name__ == "__main__": read_random() 使用memory_profiler模块来执行以上程序,输出如下: $ python -m memory_profiler

Android深度性能优化--内存优化(一篇就够)

混江龙づ霸主 提交于 2020-03-06 10:15:19
本文整理自网络课程 一、背景 在内存管理上,JVM拥有垃圾内存回收的机制,自身会在虚拟机层面自动分配和释放内存,因此不需要像使用C/C++一样在代码中分配和释放某一块内存。Android系统的内存管理类似于JVM,通过new关键字来为对象分配内存,内存的释放由GC来回收。并且Android系统在内存管理上有一个Generational Heap Memory模型,当内存达到某一个阈值时,系统会根据不同的规则自动释放可以释放的内存。即便有了内存管理机制,但是,如果不合理地使用内存,也会造成一系列的性能问题,比如内存泄漏、内存抖动、短时间内分配大量的内存对象等等。 二、优化工具 2.1 Memory Profiler Memory profiler是Android Studio自带的一个内存检测工具,通过实时图表的方式展示内存信息,具有可以识别内存泄露,内存抖动等现象,并可以将捕获到的内存信息进行堆转储、强制GC以及跟踪内存分配的能力。 Android Studio打开Profiler工具 观察Memory曲线,比较平缓即为内存分配正常,如果出现大的波动有可能发生了内存泄露。 GC:可手动触发GC Dump:Dump出当前Java Heap信息 Record:记录一段时间内的内存信息 点击Dump后 可查看当前内存分配对象 Allocations:分配对象个数 Native Size

什么是一些好的.NET Profilers?

♀尐吖头ヾ 提交于 2020-02-27 07:51:30
您在使用.net程序时使用了哪些分析器,您会特别推荐哪些? #1楼 我广泛使用了 JetBrains dotTrace 和 Redgate ANTS 。 它们在功能和价格上非常相似。 它们都提供有用的性能分析和非常基本的内存分析。 dotTrace与Resharper集成,这非常方便,因为您只需单击一下IDE即可分析单元测试的性能。 然而,dotTrace似乎经常会产生虚假的结果(例如说一个方法需要花费几年的时间才能运行) 我更喜欢ANTS呈现分析结果的方式。 它向您显示源代码,每行左侧显示运行所需的时间。 dotTrace只有树视图。 EQATEC分析器 非常基础,需要您编译程序集的特殊检测版本,然后可以在EQATEC分析器中运行。 然而,它是免费的。 总的来说,我更喜欢ANTS进行性能分析,但如果你使用Resharper,那么dotTrace的集成是一个杀手级功能,意味着它在可用性方面胜过ANTS。 免费的Microsoft CLR Profiler( .Net framework 2.0 / .Net Framework 4.0 )是.NET内存分析所需的全部内容。 2011年更新: Scitech内存分析器 有一个非常基本的UI,但有很多有用的信息,包括dotTrace和ANTS缺少的非托管内存的一些信息 - 如果你正在进行COM互操作,你可能会发现它很有用