电脑内存不断减少会怎么样(内存小数据大电脑总是卡?3种方式帮你减少内存使用)
假如你写了一个处理数据的软件,它可以在小样本文件上运行地很好,但一旦加载大量真实数据后,这个软件就会崩溃,你该怎么办?
近日,InfoQ编译了Python顾问伊塔玛·特纳(ItamarTurner-Trauring)的文章,他认为可以通过压缩、分块、索引这三种方式减少电脑内存使用。以下是原文内容。
为什么需要RAM?
在解决问题之前,我们需要先弄清楚问题是如何产生的:为什么需要计算机内存RAM?
众所周知,RAM(计算机内存)能让你读写数据,硬盘也可以读写数据,而且还比RAM更便宜。既然有硬盘了,为什么还需要RAM呢?可以不可以直接从硬盘读写数据呢?理论上讲,答案是可以的。但是,即便是最现代化且速度很快的SSD硬盘也比RAM慢太多:
从SSD上读取数据大约需要1.6万纳秒从RAM上读取数据大约需要100纳秒
也就是说,如果你想要实现快速计算,数据就只能放在RAM中,否则你的代码运行时就会慢上150倍。
减少内存使用的三个技巧
当你没有足够的RAM时,最简单省时的解决方案就是花钱,要么购买一台计算机,要么租一台云端的虚拟机。但这个方案价格昂贵,甚至有些时候会入不敷出,这时你就需要考虑如何通过修改软件来减少内存使用了。具体有以下三个技巧。
1.压缩
包括无损压缩和有损压缩两种方式。其中,无损压缩存储的数据包含的信息,和原始数据包含的信息完全相同。有损压缩存储的数据丢失了一些原始数据里的细节信息,但是这种信息丢失理想情况下不会对计算结果造成什么影响。
这里的压缩指的不是使用ZIP或者gzip工具来压缩文件,而是内存中的数据压缩表示形式。例如,你的数据有两个值:Available和Unavailable,你可以将其存为一个布尔值,用True或者False表示,这样你就可以只用1个字节来表示了。你甚至可以继续压缩至1位来表示布尔值,这样就继续压缩到了1个字节时的1/8大小。
2.分块
当你需要处理所有数据,而又无需把它们同时载入内存时,可以采用分块方案,把数据按块载入内存,每次只加载所有数据里的某一块。
比如,当你想搜索一本书里的最长单词时,你可以一页一页地载入这本书,这样你使用的内存就大大减少了,因为你一次只需要把这本书的一页载入内存,而最后得到的结果仍然是正确的。
3.索引
你可以使用索引在不同时刻加载数据的不同子集,虽然分块也能解决这个问题,但与索引相比,分块会加载很多不相关的数据,速度较慢,而索引可以快速告诉你到哪里能找出你关心的那部分数据。
假设你想阅读书本中关于土豚的章节,如果你运用分块技术,你得载入整本书,一页一页的载入,从每页中搜寻土豚。用索引的话,你可以在这本书的索引部分找到土豚的索引项,它会告诉你在哪页可以读到相关内容。和分块相比,索引的搜索速度要快很多。
最简单也最常用的实现索引的方法,就是在目录里给文件恰当地命名,比如你可以用年份和月份命名,当你想查看某个月的数据时,只需打开对应的文件即可。
以上就是伊塔玛·特纳关于修改软件来减少内存使用的三个技巧,希望对你有所帮助。
点击链接,阅读更多文章!