设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2339|回复: 7
打印 上一主题 下一主题

[讨论] 所谓RPG::Cache

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2005-10-22
帖子
519
跳转到指定楼层
1
发表于 2009-7-15 04:28:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 面粉 于 2009-7-15 10:44 编辑

默认@cache.class == Hash,key.class == String
默认脚本的毛病:
1、键值大小写敏感,但File和Filetest模块大小写不敏感
2、键值包含文件扩展名

这两个毛病会导致同样一个类型的缺憾:文件名不同,但是内容完全相同的位图,可能会在内存中生成完全一样,但是地址不同的两个拷贝,导致内存资源浪费,比如 ABCDEFG.png和Abcdefg.png。

解决办法
1、文件名称统一downcase或者upcase
2、利用File模块的方法剔除扩展名

具体怎么改我就不贴了,能看明白以上内容的自己就能改出来。 - -b
当然,如果你游戏开发的全程能够保持一致的文件名称标准,那么也可以不用修改。

另外发现一点,我归纳的可能不是很准确:
对于封装的类和模块,如果用alias对其方法进行修改,一定要加入方法是否已被定义的判断,否则alias被执行第二次的时候会产生一个无效的loop,致使堆栈过深,从而程序异常退出。

完毕。
3rd chapter ==> 55% 完工日期===>202X年?

跳不跳呢跳不跳呢跳不跳呢……下个项目死磕HQ……

Lv3.寻梦者

孤独守望

梦石
0
星屑
3132
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

2
发表于 2009-7-15 08:10:23 | 只看该作者
其一,Cache本来就是哈希表,释放资源由GC完成,通常单人作业不会出现图片重复的现象
其二,不一定要加入。只要你把名字写的够稀奇古怪够长没人想得到就行,这也是发布脚本时最后常常干的事情
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
3
发表于 2009-7-15 10:47:34 | 只看该作者
本帖最后由 紫苏 于 2009-7-15 10:48 编辑

1、Windows 环境下,路径也是大小写不敏感的,ABCDEFG.png 和 Abcdefg.png 不可能同时存在于一个目录下

2、确实需要,面粉说的是在不同的脚本定义了相同函数别名时的解决方法,但这并不是唯一导致问题的可能~当按下 F12 后,alias 语句再次被执行,仍然可能引起栈过深异常,详见:
http://szsu.spaces.live.com/blog/cns!D57D0E50BE1820CF!156.entry
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2005-10-22
帖子
519
4
 楼主| 发表于 2009-7-15 10:53:07 | 只看该作者
本帖最后由 面粉 于 2009-7-15 11:04 编辑

2# IamI

其一,Cache本来就是哈希表,释放资源由GC完成,通常单人作业不会出现图片重复的现象
其二,不一定要加入。只要你把名字写的够稀奇古怪够长没人想得到就行,这也是发布脚本时最后常常干的事情 ...
IamI 发表于 2009-7-15 08:10



Ruby的GC效率不高,而且GC只有在Cache被重新指向一个空哈希的时候才会开始,否则只有结束游戏进程或者单独对图片调用dispose才可以将资源释放。位图在内存中展开是相当占用空间的,所以还是应当从结构上来避免因为大小写或扩展名导致的资源浪费,毕竟不是所有人都能够把文件命名的标准做得很好。另外,把名字起得古怪稀奇,实际从编程的角度来讲是相当不利于程序的可读性。而且这也不是我所说的问题 - -b
所以还是应当起的通俗明白。
3rd chapter ==> 55% 完工日期===>202X年?

跳不跳呢跳不跳呢跳不跳呢……下个项目死磕HQ……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3132
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

5
发表于 2009-7-15 11:01:58 | 只看该作者
难到你不dispose吗?(惊讶状)
另外我喜欢old_函数名_脚本名_附加字符,应该不会有重的吧= =
F12 aliasBug,确实。
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2005-10-22
帖子
519
6
 楼主| 发表于 2009-7-15 11:12:47 | 只看该作者
本帖最后由 面粉 于 2009-7-15 11:14 编辑
1、Windows 环境下,路径也是大小写不敏感的,ABCDEFG.png 和 Abcdefg.png 不可能同时存在于一个目录下

2、确实需要,面粉说的是在不同的脚本定义了相同函数别名时的解决方法,但这并不是唯一导致问题的可能~当按下 ...
紫苏 发表于 2009-7-15 10:47


1、脑子有点那啥了 - -b  把这点忘记了OTZ
2、早点看到就好了,也不至于自己忙活半天…… - -bbbbbbbb  部落格什么的……最……最讨厌了 匿……我这里就是因为按下F12的时候会出错才忙活的…… - -bbbbbbbbbbbbbb
3rd chapter ==> 55% 完工日期===>202X年?

跳不跳呢跳不跳呢跳不跳呢……下个项目死磕HQ……
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

7
发表于 2009-7-15 13:45:36 | 只看该作者
把F12屏蔽掉……











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2005-10-22
帖子
519
8
 楼主| 发表于 2009-7-15 14:33:49 | 只看该作者
本帖最后由 面粉 于 2009-7-15 14:42 编辑
难到你不dispose吗?(惊讶状)
另外我喜欢old_函数名_脚本名_附加字符,应该不会有重的吧= =
F12 aliasBug,确实。
IamI 发表于 2009-7-15 11:01


1、你根本没看明白我在说什么。sigh,假设你犯糊涂,向文件夹内拷贝了两个名字都为a的文件,但扩展名不同。然后你分别加载了这两个a.png和a.bmp,两者内容一样,那么你在事件中只能dispose一个,而写脚本的时候你只记得加载了一个a.png。那么内存中仍然留有一个拷贝。我所说的就是从程序的结构上防止出现这种错误。应当保证缓存内容的唯一性。
2、alias所谓的F12问题只有在另命名一个封装的方法时才会频繁发生(比如Bitmap类的dispose方法),如果你重命名的只是一个在脚本内有定义的方法(一次),那么是不会出现这种错误的。(我怀疑是F12不会重建封装类模块的结构)另外一个出现这种错误的情况就如紫苏的Blog所言,其他情况下你再怎么按F12也是不会出错的。而且这也不能说是Bug,毕竟不是程序本身的问题,而是你自定义的结构问题。

另外楼上说屏蔽F12就有点那啥了……有点掩耳盗铃的味道 - -bbbbbbb
3rd chapter ==> 55% 完工日期===>202X年?

跳不跳呢跳不跳呢跳不跳呢……下个项目死磕HQ……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-24 14:17

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表