返回介绍

11.5 使用更少 RAM 的窍门

发布于 2024-01-25 21:44:08 字数 961 浏览 0 评论 0 收藏 0

一般来说,如果你能够避免把它放进RAM,就去做。你所加载的每样东西都耗费你的RAM。你可能会加载你的部分数据,例如使用一个内存映射;或者,你可能会使用生成器来加载你所需的部分数据,为了局部计算,而不是把它一次性全部加载进来。

如果你正用数字型的数据来工作,那么你几乎肯定会想要转而使用numpy数组——该包提供了许多直接工作在底层基本类型对象上的快速算法。与使用数字的列表相比,RAM上的节省是巨大的,而且时间上的节省也一样令人惊奇。

在本书中你已经注意到我们一般使用xrange,而不是range,只是因为(在Python 2.x中)xrange是一个产生器,然而range却构建了一个完整的列表。构建一个100000000个整数的列表仅仅用来遍历正确的次数是过分的——RAM耗费巨大而且完全不必要。Python 3.x把range变成了一个产生器,这样你不再需要做这种改变。

如果你正使用字符串工作,并且你用的是Python 2.x,如果你想要节约RAM,设法坚持使用str而不是unicode。如果你贯穿整个程序需要许多Uncode对象,你可能通过简单地升级到Python 3.3+,就能受到更好的服务。如果你正要在一个静态结构中存储大量的Uncode对象,那么你可能想要调查下我们刚才讨论过的DAWG和trie树结构。

如果你正用许多比特字串来工作,调查下numpy和bitarray包,它们都有把比特打包进字节的高效表示。你可能也会受益于查看Redis,它提供了高效的比特模式存储。

PyPy项目正在试验更高效的同质数据结构的表示,这样相同的基本类型(例如,整数)的长列表在PyPy中要比在CPython中的等价结构体可能耗费要少得多。Micro Python项目会让任何工作于嵌入式系统的人产生兴趣。它是一个缩微内存印记的,试图兼容于Python 3的Python实现。

这(几乎!)不用我说,你要知道当你设法优化RAM使用时,你必须要做基准测试,并且在你改变算法前,有一个适当的单元测试集会产生一个优厚的报酬。

已经回顾了几种高效地压缩字符串和存储数字的方法后,我们现在将看看以精度换取存储空间。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文