Board logo

标题: [Bug报告]TW丢失配置的原因推测及给开发组的解决建议 [打印本页]

作者: hzggz    时间: 2007-6-4 20:58     标题: [Bug报告]TW丢失配置的原因推测及给开发组的解决建议

今天又碰到一次配置文件丢失,TW的所有设置变回了默认设置。其实之前也碰到过几次,但是之前版本更新比较频繁,总去体验新版本了,就没深入
研究一下怎么回事。今天正好有空,就仔细看了看TheWorld.ini文件,发现了一些问题,希望对开发组解决或缓解丢失配置文件的情况有所帮助。

分析步骤:

(1):虽然我没有刻意去留意或做实验,但是我发现大多数我丢失配置文件的情况,似乎都发生在没有正常关闭TW就直接关机或重启的时候;

(2):分析TheWorld.ini内容丢失的行为。这个是TW的配置文件,除了TW,没哪个程序会访问它。因此导致配置文件内容丢失的最大可能就是TW对TheWorld.ini的非正确读写。结合第一点,我判断问题极大的可能就出在TW关闭时对TheWorld.ini这个配置文件进行了错误读写导致;

(3):沿第二点结论往下研究:TW在退出时,会有什么操作对TheWorld.ini进行读写呢?联想到TW的退出时自动保存“未关闭的标签页面”的功能,答案已经逐渐呼之欲出。经对TW操作时和关闭后所产生的TheWorld.ini文件对比发现,TW的“未关闭的标签页面”信息果然是写在TheWorld.ini里面的![OldUrl](上上次关闭TW时的“未关闭的标签页面”)+[LastUrl](上次关闭TW时的“未关闭的标签页面”)里面的内容就是。进一步实验确定TW的行为模式:当点击TW右上关闭按钮正常关闭TW时会对TheWorld.ini进行读写操作,把当前“未关闭的标签页面”信息写入文件,如果用户直接使用任务管理器终止TW则不会执行读写操作,因此推测开发组把这个读写配置文件的过程写在了TW执行正常关闭的模块里;

(4):结合以上三点,试图推出TW非正常读写配置文件原因。结论:“当未正常关闭TW就直接关机或重启时,系统要求TW关闭,TW开始执行关闭过程,并将未关闭的标签页面信息写入TheWorld.ini文件中,恰在此时,由于读写配置文件的时间超出系统设定的程序响应限时,于是系统就直接终止了TW进程,导致TW未能正常完成写入TheWorld.ini并保存的这一过程,于是下次开机TheWorld.ini文件内容丢失,TW配置丢失……”

推论,可能用过某些优化程序,如优化大师和超级兔子等,并设置了系统自动终止未响应程序和缩短了系统等待程序响应时间的用户,更容易碰到TW配置丢失的情况。而因为TW读写配置文件的时间并非十分固定,因此有时能正常读写完毕,此时一切正常,故丢失配置这个bug未必每次都能重现。

解决方法,建议开发组把“未关闭的标签页面”的信息写到一个单独的文件例如什么OldUrl.ini啊的,避开关闭时对TheWorld.ini的写入,就可以解决这个问题了。那样即使丢失,也只是丢失了“未关闭的标签页面”的信息而已,而不会影响这么大。进一步的话建议把写入的方式改为,每次打开关闭一个标签,就读写“未关闭的标签页面”信息文件的临时副本,正常关闭时用临时副本覆盖掉原信息文件,这样如果TW非正常退出,信息也会保留在临时副本里(参考office的做法)

最后,希望TW继续进步,越来越完善。

[ 本帖最后由 hzggz 于 2007-7-2 23:32 编辑 ]
作者: constantine    时间: 2007-6-4 21:10

虽然这个问题发生概率比较少,但是一发生,损失还是很大的。。
作者: 靖哥哥    时间: 2007-6-4 21:17

平时备份下ini,系统关机要按照规程来做,这才是好习惯
非法关机不仅仅会造成tw的设置丢失,还会造成很多麻烦的问题呵呵。

[ 本帖最后由 靖哥哥 于 2007-6-4 21:29 编辑 ]
作者: hzggz    时间: 2007-6-4 21:26

嗯,靖版说的是一种良好的操作习惯,应该提倡。不过某些时候可能病毒或是什么其他原因导致系统重启或关机,TW也应该能正常处理才对。现在TW用句开发人员的行话来说“健壮性还不够”,呵呵。
作者: 靖哥哥    时间: 2007-6-4 21:30     标题: 回复 #4 hzggz 的帖子

嗯哪,还要继续补钙
ps:最近我的输入法词库不行了,好多错别字
作者: hzggz    时间: 2007-6-4 21:38

你一说输入法,我发现我的搜狗3.0现在在TW上切换标签好像不会自动关闭了哦,嘿嘿
作者: 靖哥哥    时间: 2007-6-4 21:41     标题: 回复 #6 hzggz 的帖子

出来就装上了,一直都没自动关闭或者无法显示过
这个月据说会有新版本了吧。
上次坛上某个特务说,可能快支持多线程的问题了。
作者: babyfish79    时间: 2007-6-4 22:30

原帖由 靖哥哥 于 2007-6-4 21:41 发表 http://bbs.ioage.com/images/common/back.gif
出来就装上了,一直都没自动关闭或者无法显示过
这个月据说会有新版本了吧。
上次坛上某个特务说,可能快支持多线程的问题了。

呵呵,用拼音加加吧,4.1便携版,纯绿色的,超好用,词库也不错哦
强烈期待新版~~
作者: 303155066    时间: 2007-6-4 23:35

备份确实上一个需要养成的好习惯
作者: hzggz    时间: 2007-6-5 08:07

晕,刚发现写错了2个很重要的字!建议里面应该是“写入一个单独的文件”,原来怎么打成了“写如一个单独的问题”……赶快改回来。
作者: Aycox    时间: 2007-6-5 12:16

楼主帖子总能分析的详细,赞。
看到说这个现象的不少,于是总想试图重现和了解多点,楼主说的因素我曾刻意测验过很长时间,可惜还是未遇到过一次,大体可见此帖http://bbs.ioage.com/viewthread. ... mp;page=1#pid276088
作者: hzggz    时间: 2007-6-5 12:52

嗯,这个bug不是太容易重现,因为有一定的随机性。在系统终止TW之前,如果TW能完成写入TheWorld.ini的操作,则一切正常,而如果TW恰好某次写入TheWorld.ini完成的慢了,给系统强行终止,则丢失TheWorld.ini的部分内容。也就是说现在TW就在跟系统比赛,看谁手快,系统手快则TW丢失配置,TW手快则配置文件正常。所以丢不丢失就看系统和TW谁赢,而TW读写配置文件的时间未必每次相同,系统终止TW的时间也未必每次相同,因此想重现是比较困难的。而我提的建议就是避开在关闭时读写配置文件,也就是说不让TW拿配置文件来和系统比赛手快了,谁赢都好,都不会影响到配置文件,从而解决这个问题。

如果大家对这个bug很感兴趣,想重现试试看的话,可以这样试试,应该会提高这个bug出现的机会
第一步:使用“windows优化大师”这个软件,找到磁盘缓存优化。改以下几个设置(1)输入/输出缓存大小设为最大128MB;(2)打开“windows自动关闭停止响应的应用程序”这项;(3)打开“关闭无响应程序的等待时间”这项,并设置为 1 秒;(4)打开“应用程序出错的等待响应时间”这项,并设置为 1 秒;  然后保存修改,重启计算机;
第二步:同时打开很多下载工具,什么BT,emule,迅雷统统让他们下载;
第三步:运行TW,打开大量网站;
第四步:按开始->关闭计算机->重启;
然后,如果你运气好(或者是运气坏?),你就可能碰到丢失配置文件了……
整个操作就是为了缩短系统终止TW的时间,并延长TW写入配置文件的时间来试图重现bug,不过,依然要靠下运气哈
作者: lixiang    时间: 2007-6-5 12:58

这种推测完全不成立!
作者: hzggz    时间: 2007-6-5 13:04

请教楼上,为何完全不成立?
作者: qionglaoer    时间: 2007-6-5 13:42

不试了,反正我用了这么久没有遇上,很满意2.0F
作者: vistafans    时间: 2007-6-5 14:26

个人觉得楼主推测的很有道理
作者: constantine    时间: 2007-6-5 16:23

我碰到一次极端的情况。。

TW死也不认以前备份的ini
作者: hzggz    时间: 2007-6-7 16:31

不认备份会出现什么状况呢?
作者: beeblue    时间: 2007-6-7 17:07

不备份,在对你的使用造成不习惯的影响上,对于TW的其他故障有一定的解决能力.斑竹老教导我们把TW独立放到另外的地方测试.估计就是这个原因.
作者: dajiass    时间: 2007-6-14 18:06

我也经常遇到这种问题,感觉楼主分析的差不多吧。另外有些网友无法遇到这个现象,那可能是因为windows关闭程序的缺省时间比较长,我是通过超级兔子优化过的,一旦选择关机、重启,几秒钟内就会结束程序(如果没有优化,可能会等待10多秒),这可能是出现这个问题的一个必要条件。有兴趣的网友可以试试。
作者: hzggz    时间: 2007-6-16 13:26

很不幸,刚才又碰到了这个情况,2.0.4.7版本。刚安装完了微软自动更新的补丁,顺手点了重启,没先关闭TW,配置文件再次丢失
又仔细看了Theworld.ini文件,发现跟之前的版本几乎没变化。而且[RecentUrl]段还在开关标签的时候不停写入信息。
再次建议开发组把与TW配置无关的内容放入另一个单独的文件里。

毕竟绝大多数用户通常只在初次运行TW的时候修改配置比较多,之后基本很少改动,配置文件应该保持稳定,根本无必要频繁读写配置文件。目前这样容易因为意外的错误导致配置文件丢失。而这种意外完全是可以避免的,只要把与TW配置无关的内容放入另一个单独的文件里,这样不但出了问题容易查找原因,而且对性能不但没有任何影响,理论上还会提高(频繁读写一个大的文件和频繁读写一个较小的文件,哪个性能高?)如果是考虑到精简方面的原因不拆分那更无必要,本身TW就有一个twcache.ini的隐藏文件,现在还多了ImgCache文件夹,再多一个文件也无关痛痒,而且利用twcache.ini文件就可以了。


本来【保存上次关闭时打开的页面】这一功能针对的情况就应该是TW碰到意外关闭的时候,能保存当时访问的网址,现在不但未能实现这种功能(现在真正碰到意外终止了TW进程的话,是不会保存的,手动终止TW进程也是),而且还导致丢失配置文件。这个bug虽然不是经常能重现,但是一旦碰到就非常讨厌。希望开发组早日解决这个bug,免得用的时候提心吊胆。

[ 本帖最后由 hzggz 于 2007-6-16 13:33 编辑 ]




欢迎光临 世界之窗论坛 (http://bbs.theworld.cn/) Powered by Discuz! 7.2