当前位置:  开发笔记 > 后端 > 正文

你有什么策略来保持低内存使用率?

如何解决《你有什么策略来保持低内存使用率?》经验,为你挑选了4个好方法。

Ruby真的很渴望内存 - 但也值得每一位.

你怎么做才能保持低内存使用率?您是否避免使用较大的字符串并使用较小的数组/哈希值,或者关注您并让垃圾收集器完成工作是没有问题的?

编辑:我在这里发现了一篇关于这个主题的好文章- 旧的,但仍然很有趣.



1> Ben Scofield..:

我发现了Phusion的Ruby企业版(主线Ruby的一个分叉,它有很多改进的垃圾收集),以便在内存使用方面产生巨大的变化......而且,它们使得它的安装非常容易(如果你的话找到需要).

您可以在他们的网站上找到更多信息并下载.



2> Toby Hede..:

我真的认为这不重要.为了提高内存消耗,使代码的可读性降低是你应该只在需要的时候做的事情.和需要,我的意思是有一个特定的情况下对性能配置和 具体的指标,其指示的任何变化将解决这一问题.

如果你的应用程序内存将成为限制因素,那么Ruby可能不是最佳选择.也就是说,我发现我的Rails应用程序通常每个Mongrel实例消耗大约40-60mb的RAM.在方案中,这不是很多.

您可以使用JRuby在JVM上运行应用程序 - Ruby VM当前不像JVM那样用于内存管理和垃圾收集.1.9版本增加了许多改进,还有正在开发的替代VM.



3> Mark Kegel..:

    选择有效表示的日期结构,可以很好地扩展,并按照您的需要进行操作.

    使用可以使用高效数据结构而不是臃肿但更容易使用的算法.

    看看别处.Ruby有一个C桥,它在C中比在Ruby中更容易记忆.



4> tokhi..:

Ruby开发人员非常幸运,因为他们不必自己管理内存.

请注意,ruby会分配对象,例如,简单的事情

100.times{ 'foo' }

分配100个字符串对象(字符串是可变的,每个版本都需要自己的内存分配).

确保如果您使用库分配大量对象,则其他替代方案不可用,您的选择值得支付垃圾收集器成本.(您可能没有很多请求,也可能不关心每个请求几十毫秒).

例如,创建哈希对象实际上分配的不仅仅是一个对象

{'joe' => 'male', 'jane' => 'female'}

不分配1个对象但是7.(一个哈希,4个字符串+ 2个密钥字符串)

如果您可以使用符号键,因为它们不会被垃圾收集.但是因为它们不会被垃圾收集,所以你要确保不要使用完全动态的密钥,比如将用户名转换为符号,否则你会"泄漏"内存.

示例:在应用程序的某处,您在用户名上应用to_sym,如:

hash[current_user.name.to_sym] = something

当你有数百个用户时,那可能没问题,但是如果你有一百万用户会发生什么?这是数字:

ruby-1.9.2-head >
# Current memory usage : 6608K
# Now, add one million randomly generated short symbols
ruby-1.9.2-head > 1000000.times { (Time.now.to_f.to_s).to_sym }

# Current memory usage : 153M, even after a Garbage collector run.

# Now, imagine if symbols are just 20x longer than that ?
ruby-1.9.2-head > 1000000.times { (Time.now.to_f.to_s * 20).to_sym }
# Current memory usage : 501M

请注意,以前永远不会在符号或检查参数中转换非受控参数,这很容易导致拒绝服务.

还要记住避免嵌套循环超过三层,因为它会使维护变得困难.将循环和函数的嵌套限制在三个或更少级别是保持代码性能的一个很好的经验法则.

以下是一些有关的链接:

http://merbist.com

http://blog.monitis.com

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有