当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : wine慢的原因
帖子发表于 : 2006-06-11 14:38 
头像

注册: 2005-08-25 13:58
帖子: 808
地址: ustc
送出感谢: 0 次
接收感谢: 0 次
在 linuxsir 上看到 hzhr 的一片帖子,觉得很有道理:
http://www.linuxsir.org/bbs/showthread.php?t=243037

引用:
并不是说有了 -*-gbk-0 字体,Wine 就没有这个问题了,可能原先我没有说清楚,造成了一些理解上的不对。
先说一下这个问题的原因,不是 locale 也不是输入法的问题,问题原因就是在于 Wine 的那一段代码:
代码:

代码:
fontSet = XCreateFontSet(display, "*", /*FIXME*/ &missing_fonts, &count, NULL);


如果了解 XFontSet,那就知道那段代码是干什么的,简单的说,就是根据匹配条件,创建出一个适合当前locale的XFontSet。怎么样的 XFontSet才是“适合”的呢,如果安装了 gtk+ 1.0,可以查看 /etc/gtk/gtkrc.*,可以看到不同的 locale 对 XFontSet 的要求是不一样的,当然你也可以查看 /usr/X11R6/lib/X11/locale/*/XLC_LOCALE,里面详细的描叙了创建 XFontSet 的规则。例如,在我的机器上,Xorg 6.9.0,zh_CN.GBK下,创建成功的 XFontSet 包含有 ISO8859-1 和 GBK-0 字符集的字体。
我附带一个测试程序,可以查看在当前 locale 下,XServer缺了哪些字符集的字体。在不同locale下试试看,下面是在我机器上的输出:
代码:
代码:
hzhr@debian:~/test$ LANG=zh_CN.GB2312 time ./xfontset
ximFontSet = 0x80550e0, missing_fonts = (nil), count = 0
0.00user 0.00system 0:00.07elapsed 11%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+342minor)pagefaults 0swaps

hzhr@debian:~/test$ LANG=zh_CN.GBK time ./xfontset
ximFontSet = 0x8054158, missing_fonts = (nil), count = 0
0.00user 0.00system 0:00.05elapsed 20%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+346minor)pagefaults 0swaps

hzhr@debian:~/test$ LANG=zh_CN.GB18030 time ./xfontset
ximFontSet = 0x8055df0, missing_fonts = 0x80541f0, count = 1
missing_fonts[0] = GB18030-0
0.00user 0.00system 0:07.42elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+292minor)pagefaults 0swaps

hzhr@debian:~/test$ LANG=zh_TW.BIG5 time ./xfontset
ximFontSet = 0x8056230, missing_fonts = (nil), count = 0
0.01user 0.00system 0:00.05elapsed 37%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+349minor)pagefaults 0swaps

hzhr@debian:~/test$ LANG=zh_HK.big5hkscs time ./xfontset
ximFontSet = 0x80541f0, missing_fonts = 0x80541e0, count = 1
missing_fonts[0] = BIG5HKSCS-0
0.00user 0.00system 0:07.37elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+301minor)pagefaults 0swaps


如上,在 zh_CN.GB18030 和 zh_HK.big5hkscs 下,这个程序运行的时间明显偏久,因为我的系统缺了 GB18030-0 和 BIG5HKSCS-0 的字体。所以你可以查看一下,在 zh_CN.UTF-8 下,你的系统缺了哪些字体?
另外需要说明的是,XCreateFontSet使用"*"来创建字体,本来就是很慢的,所以即使你的当前locale下不缺字体,这个查找也可能是很费时间的,所以不要抱怨为什么字体不缺,还是这么慢。

要解决这个问题,没有什么好的办法,给 Wine 打补丁可以,但是补丁不好写,要用什么匹配条件来替换 "*" 呢,没有一个固定的完美的匹配条件能适合所有locale,所以 gtk+ 1.0 的做法是,读配置文件 /etc/gtk/gtkrc.*,XFontSet是过时的东西,Wine 不会接受这样的补丁;或者Wine可以去掉支持OverTheSpot的XIM输入风格,因为目前看只有OverTheSpot输入风格要求 XFontSet。当然最简单的办法,缺啥补啥。


我的理解是,因为缺字体,所以XFontSet这个函数要运行很久,这也就是为什么,打开一个窗口或菜单很慢的原因。如果在打开菜单的时候用用top看cpu使用率的话,会发现Xorg占用了97%以上(注意这里是Xorg占用的CPU时间,而不是wine),我猜应该是因为 XFontSet 在查找字体的缘故,而这个任务是由Xorg完成的。

那个 xfontset (附带的查看却什么字体的程序)我放到附件里了,方便在linuxsir上没帐号的朋友。

我运行时,显示的是:
代码:
ximFontSet = 0x8070fa0, missing_fonts = 0x806f3f0, count = 1
missing_fonts[0] = GBK-0


谁能告诉我怎样加 GBK-0字符集啊 :em70


附件:
xfontset.tar.gz [3.73 KiB]
被下载 74 次


_________________
爱喝真猪奶茶的夜鸣猪
页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2006-06-11 17:47 

注册: 2006-03-17 13:40
帖子: 147
送出感谢: 0 次
接收感谢: 0 次
这个贴是精华,我就是按这个贴搞定的。


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2006-06-11 18:25 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
代码:
$ ./xfontset
ximFontSet = 0x8076268, missing_fonts = (nil), count = 0

~/.wine/drive_c/windows/fonts$ l
SimSun-Bold.ttf@  SimSun.ttf@


试试

我觉得还有其他bug的。不光是字体。


_________________
● 鸣学


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2006-06-11 21:20 
头像

注册: 2005-08-25 13:58
帖子: 808
地址: ustc
送出感谢: 0 次
接收感谢: 0 次
楼上的朋友,SimSun-Bold.ttf 我这里没有,另外,在扩展名后加"@"的用意是?


_________________
爱喝真猪奶茶的夜鸣猪


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2006-06-12 0:07 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
@是表示链接。ln的文件啊。呵呵。我的文件都是这样搞的,自己控制,其他不是自己的目录,都尽量用ln的。
Bold不记得哪里下的。网上有。


_________________
● 鸣学


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2006-06-13 14:33 
头像

注册: 2005-08-25 13:58
帖子: 808
地址: ustc
送出感谢: 0 次
接收感谢: 0 次
已经解决了,看本论坛的:

[分享]解决wine启动慢和xorg占有cpu100%的方法。(目前应该是最好的)
http://forum.ubuntu.org.cn/viewtopic.php?t=17545


_________________
爱喝真猪奶茶的夜鸣猪


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译