Blame optimization-guide/zh_CN/zh_CN.po

Packit 1470ea
# Chinese (China) translation for gnome-devel-docs.
Packit 1470ea
# Copyright (C) 2010 gnome-devel-docs's COPYRIGHT HOLDER
Packit 1470ea
# This file is distributed under the same license as the gnome-devel-docs package.
Packit 1470ea
# YunQiang Su <wzssyqa@gmail.com>, 2010.
Packit 1470ea
#
Packit 1470ea
msgid ""
Packit 1470ea
msgstr ""
Packit 1470ea
"Project-Id-Version: gnome-devel-docs master\n"
Packit 1470ea
"POT-Creation-Date: 2010-05-14 17:00+0000\n"
Packit 1470ea
"PO-Revision-Date: 2010-07-21 14:01+0800\n"
Packit 1470ea
"Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n"
Packit 1470ea
"Language-Team: Chinese (China) <i18n-zh@googlegroups.com>\n"
Packit 1470ea
"MIME-Version: 1.0\n"
Packit 1470ea
"Content-Type: text/plain; charset=UTF-8\n"
Packit 1470ea
"Content-Transfer-Encoding: 8bit\n"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:3(title)
Packit 1470ea
msgid "The Quick Guide to Optimizing GNOME Programs"
Packit 1470ea
msgstr "优化文档的快速指南"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:5(para)
Packit 1470ea
msgid ""
Packit 1470ea
"This is a brief introduction to optimization, both the hows and the whys. "
Packit 1470ea
"Details of individual tools and techniques are left for later articles, but "
Packit 1470ea
"a collection of hints and tricks is provided."
Packit 1470ea
msgstr ""
Packit 1470ea
"这是关于优化的一个简单介绍,以及如何做和为何这么做。每个工具和技术的细节留到"
Packit 1470ea
"未来的文档中,但是提供了一些提示和技巧。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:10(title)
Packit 1470ea
msgid "What are we Optimizing?"
Packit 1470ea
msgstr "什么需要优化?"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:11(para)
Packit 1470ea
msgid ""
Packit 1470ea
"When we optimize for GNOME the first thing to remember is this: we are not "
Packit 1470ea
"trying to make the program better, we are trying to make the person using "
Packit 1470ea
"the computer happier."
Packit 1470ea
msgstr ""
Packit 1470ea
"优化 GNOME 程序时需要记住的第一件事情是:我们在做的不是使程序更好,而是让人们"
Packit 1470ea
"更快乐地使用计算机。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:14(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Better programs make people happier, but there are some improvements that "
Packit 1470ea
"will make them a lot happier than others: Responsiveness, start-up time, "
Packit 1470ea
"easy to access commands and not having the computer go into swap the moment "
Packit 1470ea
"more than two programs are open."
Packit 1470ea
msgstr ""
Packit 1470ea
"更好的程序可以使人们更快乐,但是一些改进将使他们比别人更快乐:反应速度、启动"
Packit 1470ea
"时间、更容易找到命令以及在多个程序同时打开时不让计算机卡住。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:17(para)
Packit 1470ea
#, fuzzy
Packit 1470ea
msgid ""
Packit 1470ea
"Traditional optimization tackles concepts like CPU use, code size, the "
Packit 1470ea
"number of mouse clicks and the memory use of the program. This second list "
Packit 1470ea
"has been chosen to correlate with the first list, however there is an "
Packit 1470ea
"important difference: The person using GNOME doesn't care about the second "
Packit 1470ea
"list, but they care a lot about the first list. When optimizing GNOME "
Packit 1470ea
"programs we will reduce CPU use, memory use and all those things, but these "
Packit 1470ea
"are the means to the end, not the final goal. We are optimizing for people."
Packit 1470ea
msgstr "传统的优化解决 CPU 使用、代码大小、鼠标点击量以及内存使用。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:23(title)
Packit 1470ea
msgid "Doing the Optimization"
Packit 1470ea
msgstr "进行优化"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:24(para)
Packit 1470ea
msgid ""
Packit 1470ea
"The previous section omitted one important qualifier: To optimize something "
Packit 1470ea
"it has to be measurable. You can't measure happiness. However, you can "
Packit 1470ea
"measure start-up time so you can tell if you have improved it. Happiness "
Packit 1470ea
"will then, hopefully, follow."
Packit 1470ea
msgstr ""
Packit 1470ea
"上面的章节忽略了一个重要的指标:优化的东西必须是可量测的。快乐是无法量测的,"
Packit 1470ea
"但是可以量测启动时间,然后讨论是否需要对其进行优化。希望快乐也能随之而来吧。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:27(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Optimization is the process of measurement, refinement and re-measurement. "
Packit 1470ea
"So the first thing you must do is find a way to measure what you are "
Packit 1470ea
"optimizing. Ideally this measurement is a single number, for example: the "
Packit 1470ea
"time taken to perform a task. This is your benchmark, it is the only way to "
Packit 1470ea
"tell if you are winning or losing. There is a big difference between a "
Packit 1470ea
"program that <emphasis>should</emphasis> be fast and a program that "
Packit 1470ea
"<emphasis>is</emphasis> fast."
Packit 1470ea
msgstr ""
Packit 1470ea
"优化是测量、精益求精和重新测量的过程。所以,第一件必须要做的事情就是找到一种"
Packit 1470ea
"测量要优化的事情的方法。这个测量结果最好是一个数字,例如:执行一个任务所需要"
Packit 1470ea
"的时间。这是您的性能测试,这时唯一可以告诉您通过还是失败的方法。在一个程序 "
Packit 1470ea
"<emphasis>应该</emphasis> 快还是 <emphasis>已经</emphasis> 快之间的区别。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:30(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Once you have a basic benchmark you need to find out why your code is not "
Packit 1470ea
"doing as well as it should. It is tempting to do this by inspection: just "
Packit 1470ea
"looking at the code and trying to spot something that looks like it needs "
Packit 1470ea
"improvement. You will invariably be wrong. Using a profiler to get a "
Packit 1470ea
"detailed break-down of what your program really does is the only way to be "
Packit 1470ea
"sure."
Packit 1470ea
msgstr ""
Packit 1470ea
"进行了基本的性能测试之后,您需要找出为什么代码没有如其应该的那样快。可以通过"
Packit 1470ea
"这样来尝试:检查代码找出需要改进的地方。您可能总会是错误的。使用一个性能分析"
Packit 1470ea
"器来获取详细的程序每步的工作是唯一可以保证是正确的方法。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:33(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Usually the problem is isolated to small sections of code. Pick the worst "
Packit 1470ea
"place and concentrate on that first. Once that is done, rerun the profiler "
Packit 1470ea
"and repeat. As you proceed the gains made at each step will get less and "
Packit 1470ea
"less, at some point you will have to decide that the results are good "
Packit 1470ea
"enough. If your efforts are only extracting 10% improvements then you are "
Packit 1470ea
"well past the point where you should have stopped."
Packit 1470ea
msgstr ""
Packit 1470ea
"程序通常可以分为很小的代码块。找出性能最差的地方并集中精力首先处理。完成之"
Packit 1470ea
"后,重新运行性能分析器然后重复。每进行一次这样的努力将获得的越来越少,您可以"
Packit 1470ea
"在一个点上认为结果已经足够好了。如果您的努力只能获取 10% 的改进,最好略过这个"
Packit 1470ea
"点,并且应该停止。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:36(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Don't forget the big picture. For example, rather than just trying to speed "
Packit 1470ea
"up a piece of code, ask yourself if it needs to be run at all. Could it be "
Packit 1470ea
"combined with another piece of code? Can the results of previous "
Packit 1470ea
"calculations be saved and reused? It won't even need to be optimized if it "
Packit 1470ea
"is in a place where the user is never going to notice it. Worse still, the "
Packit 1470ea
"code may already be optimized and is doing the heavy calculations now to "
Packit 1470ea
"avoid doing them later. Code does not run in isolation and neither does the "
Packit 1470ea
"optimization process."
Packit 1470ea
msgstr ""
Packit 1470ea
"不要忘记大图片。例如,在尝试加速一段代码之前,先想想是否真的需要它。是否可以"
Packit 1470ea
"和其它代码块结合?前面计算的结果是否可以保存起来并重用?如果是用户根本不会注"
Packit 1470ea
"意的地方就甚至不需要优化。更糟的是,代码已经优化了,并且正在进行高负载运算,"
Packit 1470ea
"那就需要避免稍候再次进行运算。不孤立运行的代码也不需要优化过程。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:41(title)
Packit 1470ea
msgid "Hints"
Packit 1470ea
msgstr "提示"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:43(title)
Packit 1470ea
msgid "The Fundamentals"
Packit 1470ea
msgstr "基本原理"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:45(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Re-run your benchmark after every change you make to the code and keep a log "
Packit 1470ea
"of everything you change and how it affects the benchmark. This lets you "
Packit 1470ea
"undo mistakes and also helps you not to repeat mistakes."
Packit 1470ea
msgstr ""
Packit 1470ea
"对代码进行更改之后重新运行性能测试,记录每次的更改及对性能的影响。这可以帮助"
Packit 1470ea
"您修复错误,也可以帮您避免重复犯错。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:50(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Make sure your code is correct and bug-free before optimizing it. Check that "
Packit 1470ea
"it remains correct and bug-free after optimization."
Packit 1470ea
msgstr ""
Packit 1470ea
"在进行优化之前确保代码是正确且没有缺陷的。在优化之后检查是否仍然是正确且没有"
Packit 1470ea
"缺陷的。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:55(para)
Packit 1470ea
msgid "Optimize at the high level before optimizing the details."
Packit 1470ea
msgstr "在对细节进行优化之前先在高层进行优化。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:60(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Use the right algorithm. The classic text-book example is using quick-sort "
Packit 1470ea
"instead of bubble-sort. There are many others, some save memory, some save "
Packit 1470ea
"CPU. Also, see what shortcuts you can make: you can do quicker than quick-"
Packit 1470ea
"sort if you are prepared to make some compromises."
Packit 1470ea
msgstr ""
Packit 1470ea
"使用正确的算法。经典的文本排序使用的是快速排序而不是冒泡排序。还有很多其它,"
Packit 1470ea
"一些可以节省内存,一些可以节省 CPU。同样,寻找您可以走的捷径:如果愿意进行某"
Packit 1470ea
"些组合,甚至可以比快速排序更快。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:65(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Optimization is a trade-off. Caching results speeds up calculations, but "
Packit 1470ea
"increases memory use. Saving data to disk saves memory, but costs time when "
Packit 1470ea
"it is loaded back from disk."
Packit 1470ea
msgstr ""
Packit 1470ea
"优化就是折衷。缓存结果可以加速运行,但是会增加内存使用。将数据保存到磁盘可以"
Packit 1470ea
"节省内存,但从磁盘中加载时浪费时间。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:70(para)
Packit 1470ea
#, fuzzy
Packit 1470ea
msgid ""
Packit 1470ea
"Make sure you choose a wide variety of inputs to optimize against. If you "
Packit 1470ea
"don't it is easy to end up with a piece of code carefully optimized for one "
Packit 1470ea
"file and no others."
Packit 1470ea
msgstr "确保选择了足够多的输入来再次进行优化。如果不能容易"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:75(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Avoid expensive operations: Multiple small disk reads. Using up lots of "
Packit 1470ea
"memory so disk swapping becomes necessary. Avoid anything that writes or "
Packit 1470ea
"reads from the hard disk unnecessarily. The network is slow too. Also avoid "
Packit 1470ea
"graphics operations that need a response from the X server."
Packit 1470ea
msgstr ""
Packit 1470ea
"避免高消耗的操作:多次从磁盘读取很少的数据。使用很多内存会需要交换。避免任何"
Packit 1470ea
"不需要的硬盘读写。网络也是很慢的。同样避免需要 X 服务器响应的图形操作。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:81(title)
Packit 1470ea
msgid "Traps for the Unwary"
Packit 1470ea
msgstr "粗心造成的陷阱"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:83(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Beware of side effects. There can often be strange interactions between "
Packit 1470ea
"different sections of code, a speed-up in one part can slow another part "
Packit 1470ea
"down."
Packit 1470ea
msgstr ""
Packit 1470ea
"注意副作用。在不同的代码部分之间经常有奇怪的交互,加速一个部分可能会使另一部"
Packit 1470ea
"分的速度降低。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:88(para)
Packit 1470ea
msgid ""
Packit 1470ea
"When timing code, even on a quiet system, events outside the program add "
Packit 1470ea
"noise to the timing results. Average over multiple runs. If the code is very "
Packit 1470ea
"short, timer resolution is also a problem. In this case measure the time the "
Packit 1470ea
"computer takes to run the code 100 or 1000 times. If the times you are "
Packit 1470ea
"recording are longer than a few seconds, you should be OK."
Packit 1470ea
msgstr ""
Packit 1470ea
"测量代码的运行时间时,即使在安静的系统上,程序之外的事件也会对计时产生影响。"
Packit 1470ea
"多次运行取平均值。如果代码非常短,计时精度也是一个问题。这时,测量代码运行 "
Packit 1470ea
"100 甚至 1000 次的时间。如果您记录的时间长达数秒,就可以了。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:93(para)
Packit 1470ea
msgid ""
Packit 1470ea
"It is very easy to be misled by the profiler. There are stories of people "
Packit 1470ea
"optimizing the operating system idle-loop because that is where it spent all "
Packit 1470ea
"its time! Don't optimize code that does nothing the user cares about."
Packit 1470ea
msgstr ""
Packit 1470ea
"也很容易被性能分析器误导。有人曾经优化掉了操作系统的 idle-loop,因为它耗费掉"
Packit 1470ea
"了系统所有的时间。不要优化做用户根本不关心的部分。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:98(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Remember the resources on the X server. Your program's memory usage doesn't "
Packit 1470ea
"include the pixmaps that are stored in the X server's process, but they are "
Packit 1470ea
"still using up memory. Use xrestop to see what resources your program is "
Packit 1470ea
"using."
Packit 1470ea
msgstr ""
Packit 1470ea
"别忘记了 X 服务器上的时间。您的程序的内存使用量并没有包含在 X 服务器进程中存"
Packit 1470ea
"储的像素影射,但它们仍然使用内存。使用 xrestop 查看您的程序使用的资源。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:104(title)
Packit 1470ea
msgid "Low Level Hints"
Packit 1470ea
msgstr "底层提示"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:106(para)
Packit 1470ea
msgid ""
Packit 1470ea
"When optimizing memory use, be wary of the difference between peak usage and "
Packit 1470ea
"average memory usage. Some memory is almost always allocated, this is "
Packit 1470ea
"usually bad. Some is only briefly allocated, this may be quite acceptable. "
Packit 1470ea
"Tools like massif use the concept of space-time, the product of memory used "
Packit 1470ea
"and the duration it was allocated for, instead."
Packit 1470ea
msgstr ""
Packit 1470ea
"优化内存使用时,警惕高峰使用量和平均使用量的区别。总是持有申请的内存是不好"
Packit 1470ea
"的。一些仅仅是简单的申请,还是可以接受的。类似于 massif 的工具使用时空 (内存"
Packit 1470ea
"使用量和使用时间的乘积) 的概念来代替。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:111(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Time simplified bits of code that do only the things you know are essential, "
Packit 1470ea
"this gives an absolute lower limit on the time your code will take. For "
Packit 1470ea
"example, when optimizing a loop time the empty loop. If that is still too "
Packit 1470ea
"long no amount of micro-optimization will help and you will have to change "
Packit 1470ea
"your design. Make sure the compiler doesn't optimize away your empty loop."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:116(para)
Packit 1470ea
#, fuzzy
Packit 1470ea
msgid ""
Packit 1470ea
"Move code out from inside loops. A slightly more complicated piece of code "
Packit 1470ea
"that is executed once is far quicker than a simple piece of code executed a "
Packit 1470ea
"thousand times. Avoid calling slow code often."
Packit 1470ea
msgstr "去除内部循环的代码。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:121(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Give the compiler as many hints as possible. Use the const keyword. Use "
Packit 1470ea
"<envar>G_INLINE_FUNC</envar> for short, frequently called, functions. Look "
Packit 1470ea
"up <envar>G_GNUC_PURE</envar>, <envar>G_LIKELY</envar> and the other glib "
Packit 1470ea
"miscellaneous macros. Use the macros instead of gcc-specific keywords to "
Packit 1470ea
"ensure portability."
Packit 1470ea
msgstr ""
Packit 1470ea
"给编译器尽可能多的提示。使用常量关键字。使用 <envar>G_INLINE_FUNC</envar> 作"
Packit 1470ea
"为经常调用的函数的简称。查看 <envar>G_GNUC_PURE</envar>,<envar>G_LIKELY</"
Packit 1470ea
"envar> 和其它 glib 杂项宏。使用这些宏代替 gcc 专用的关键字,以确保可移植性。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:126(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Don't use assembly language. It is not portable and, while it may be fast on "
Packit 1470ea
"one processor, it is not even guaranteed to be fast on every processor that "
Packit 1470ea
"supports that architecture (e.g. Athlon vs. Pentium 4)."
Packit 1470ea
msgstr ""
Packit 1470ea
"不要使用汇编语言。汇编语言不可移植,而且虽然可能在一个处理器上很快,但是甚至"
Packit 1470ea
"在支持同样处理器架构的处理器上也不能保证可以很快 (例如速龙和奔四的区别)。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:131(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Don't rewrite an existing library routine unless you are sure it is "
Packit 1470ea
"unnecessarily slow. Many CPU-intensive library routines have already been "
Packit 1470ea
"optimized. Conversely, some library routines are slow, especially ones that "
Packit 1470ea
"make system calls to the operating system."
Packit 1470ea
msgstr ""
Packit 1470ea
"不要重写已有的库函数,除非确定库函数不可接受得慢。很多 CPU 敏感的库函数都是优"
Packit 1470ea
"化过的。相反地,一些库函数也是慢的,尤其是那些使用系统调用的。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:136(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Minimize the number of libraries you link to. The fewer libraries to link "
Packit 1470ea
"in, the faster the program starts. This is a difficult thing to do with "
Packit 1470ea
"GNOME."
Packit 1470ea
msgstr "使用尽量少的库。链接到的库越少,程序启动越快。对于 GNOME,这很难达到。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:142(title)
Packit 1470ea
msgid "High Level Tricks"
Packit 1470ea
msgstr "高层技巧"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:144(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Take advantage of concurrency. This doesn't just mean using multiple "
Packit 1470ea
"processors, it also means taking advantage of the time the user spends "
Packit 1470ea
"thinking about what they are going to do next to perform some calculations "
Packit 1470ea
"in anticipation. Do calculations while waiting for data to be loaded off "
Packit 1470ea
"disk. Take advantage of multiple resources, use them all at once."
Packit 1470ea
msgstr ""
Packit 1470ea
"发挥并发的优势。这并不仅仅意味着使用多处理器,也意味着减少用户执行一些计算所"
Packit 1470ea
"预期的时间。在等待从磁盘上加载数据是进行计算。充分使用多种资源,同时使用它"
Packit 1470ea
"们。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:149(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Cheat. The user only has to think that the computer is fast, it doesn't "
Packit 1470ea
"matter whether it actually is or not. It is the time between the command and "
Packit 1470ea
"the answer that is important, it doesn't matter if the response is pre-"
Packit 1470ea
"calculated, cached, or will in fact be worked out later at a more convenient "
Packit 1470ea
"time, as long as the user gets what they expect."
Packit 1470ea
msgstr ""
Packit 1470ea
"欺骗。用户仅仅认为计算机很快,而不管实际上是否如此。命令和结果之间的时间很重"
Packit 1470ea
"要,而无论是提前计算的、缓存的还是在稍候方便的时间进行实际计算,尽快地给出用"
Packit 1470ea
"户期望的结果。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:154(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Do things in the idle loop. It is easier to program than using full multi-"
Packit 1470ea
"threading but still gets things done out of the users eye. Be careful "
Packit 1470ea
"though, if you spend too long in the idle loop your program will become "
Packit 1470ea
"sluggish. So regularly give control back to the main loop."
Packit 1470ea
msgstr ""
Packit 1470ea
"在空闲循环中进行某些工作。这比多线程更容易编程但仍然在用户视线之外进行了工"
Packit 1470ea
"作。仍然需要注意,如果在空闲循环中花费太多时间,程序将变卡。所以需要经常返回"
Packit 1470ea
"主循环。"
Packit 1470ea
Packit 1470ea
#: C/optimization-intro.xml:159(para)
Packit 1470ea
msgid ""
Packit 1470ea
"If all else fails, tell the user that the code is going to be slow and put "
Packit 1470ea
"up a progress bar. They won't be as happy as if you had just presented the "
Packit 1470ea
"results, but they will at least know the program hasn't crashed and they can "
Packit 1470ea
"go get a cup of coffee."
Packit 1470ea
msgstr ""
Packit 1470ea
"如果都失败了,告诉用户代码将会比较慢并且使用进度条。如果仅仅给出结果,用户并"
Packit 1470ea
"不会高兴,他们至少会知道程序没有崩溃,他们可以去喝杯咖啡。"
Packit 1470ea
Packit 1470ea
#. When image changes, this message will be marked fuzzy or untranslated for you.
Packit 1470ea
#. It doesn't matter what you translate it to: it's not used at all.
Packit 1470ea
#: C/optimization-massif.xml:52(None)
Packit 1470ea
msgid ""
Packit 1470ea
"@@image: 'figures/massif-before.png'; md5=1a6b2ace548e6789ab8bfacb3727b345"
Packit 1470ea
msgstr ""
Packit 1470ea
"@@image: 'figures/massif-before.png'; md5=1a6b2ace548e6789ab8bfacb3727b345"
Packit 1470ea
Packit 1470ea
#. When image changes, this message will be marked fuzzy or untranslated for you.
Packit 1470ea
#. It doesn't matter what you translate it to: it's not used at all.
Packit 1470ea
#: C/optimization-massif.xml:114(None)
Packit 1470ea
msgid ""
Packit 1470ea
"@@image: 'figures/massif-after.png'; md5=36d1b4ad7ab49b28b69ad3eabbaa7069"
Packit 1470ea
msgstr ""
Packit 1470ea
"@@image: 'figures/massif-after.png'; md5=36d1b4ad7ab49b28b69ad3eabbaa7069"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:3(title)
Packit 1470ea
msgid ""
Packit 1470ea
"Using <application>Massif</application> for Profiling Memory Use in GNOME "
Packit 1470ea
"Software"
Packit 1470ea
msgstr "使用 <application>Massif</application> 分析 GNOME 软件的内存使用"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:5(para)
Packit 1470ea
msgid ""
Packit 1470ea
"This article describes how to use the <application>Massif</application> heap "
Packit 1470ea
"profiler with GNOME applications. We describe how to invoke, interpret, and "
Packit 1470ea
"act on the output of <application>Massif</application>. The "
Packit 1470ea
"<application>Same GNOME</application> game is used as an example."
Packit 1470ea
msgstr ""
Packit 1470ea
"这篇文章描述怎样在 GNOME 程序中使用 <application>Massif</application> 堆分析"
Packit 1470ea
"器,解释怎样调用、理解已经对 <application>Massif</application> 的输出进行操"
Packit 1470ea
"作。"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:10(title)
Packit 1470ea
msgid "Introduction"
Packit 1470ea
msgstr "简介"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:11(para)
Packit 1470ea
msgid ""
Packit 1470ea
"<application>Massif</application> is a member of the 
Packit 1470ea
"url=\"http://valgrind.org/\">valgrind</ulink> suite of memory-profiling "
Packit 1470ea
"tools. Its purpose is to give a detailed view of dynamic memory usage during "
Packit 1470ea
"the lifetime of the program. Specifically it records the memory use of the "
Packit 1470ea
"heap and the stack."
Packit 1470ea
msgstr ""
Packit 1470ea
"<application>Massif</application> 是 
Packit 1470ea
"valgrind.org/\">valgrind</ulink> 内存分析套件的一个成员。它的目的是在程序的生"
Packit 1470ea
"命期里给出动态内存使用的细节。它会专门记录堆栈的内存使用。"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:14(para)
Packit 1470ea
msgid ""
Packit 1470ea
"The heap is the region of memory which is allocated with functions like "
Packit 1470ea
"malloc. It grows on demand and is usually the largest region of memory in a "
Packit 1470ea
"program. The stack is where all the local data for functions is stored. This "
Packit 1470ea
"includes the \"automatic\" variables in C and the return address for "
Packit 1470ea
"subroutines. The stack is typically a lot smaller and a lot more active than "
Packit 1470ea
"the heap. We won't consider the stack explicitly since <application>Massif</"
Packit 1470ea
"application> treats it as though it were just another part of the heap. "
Packit 1470ea
"<application>Massif</application> also gives information about how much "
Packit 1470ea
"memory is used to manage the heap."
Packit 1470ea
msgstr ""
Packit 1470ea
"堆是使用类似于 malloc 的函数分配内存的地方。它根据需要增长,而且通常是程序中"
Packit 1470ea
"最大的内存区域。栈是存放函数的本地数据的地方,包括 C 语言中的自动变量和子函数"
Packit 1470ea
"的返回地址。栈通常比堆更小更活跃。我们并没有显式地考虑栈,因为 "
Packit 1470ea
"<application>Massif</application> 将其认定为堆的另外一部分。"
Packit 1470ea
"<application>Massif</application> 也给出管理堆所使用的内存量。"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:17(para)
Packit 1470ea
msgid ""
Packit 1470ea
"<application>Massif</application> produces two output files: a graphical "
Packit 1470ea
"overview in a postscript file and a detailed breakdown in a text file."
Packit 1470ea
msgstr ""
Packit 1470ea
"<application>Massif</application> 产生两个输出文件:一个 postscript 格式的概"
Packit 1470ea
"况以及一个文本格式的细节详述。"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:22(title)
Packit 1470ea
msgid "Using <application>Massif</application> with GNOME"
Packit 1470ea
msgstr "在 GNOME 中使用 <application>Massif</application>"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:23(para)
Packit 1470ea
msgid ""
Packit 1470ea
"<application>Massif</application> has very few options and for many programs "
Packit 1470ea
"does not need them. However for GNOME applications, where memory allocation "
Packit 1470ea
"might be buried deep in either glib or GTK, the number of levels down the "
Packit 1470ea
"call-stack Massif descends needs to be increased. This is achieved using the "
Packit 1470ea
"--depth parameter. By default this is 3; increasing it to 5 will guarantee "
Packit 1470ea
"the call-stack reaches down to your code. One or two more levels may also be "
Packit 1470ea
"desirable to provide your code with some context. Since the level of detail "
Packit 1470ea
"becomes quickly overwhelming it is best to start with the smaller depth "
Packit 1470ea
"parameter and only increase it when it becomes apparent that it isn't "
Packit 1470ea
"sufficient."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:26(para)
Packit 1470ea
msgid ""
Packit 1470ea
"It is also useful to tell <application>Massif</application> which functions "
Packit 1470ea
"allocate memory in glib. It removes an unnecessary layer of function calls "
Packit 1470ea
"from the reports and gives you a clearer idea of what code is allocating "
Packit 1470ea
"memory. The allocating functions in glib are g_malloc, g_malloc0, g_realloc, "
Packit 1470ea
"g_try_malloc, and g_mem_chunk_alloc. You use the --alloc-fn option to tell "
Packit 1470ea
"Masiff about them."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:29(para)
Packit 1470ea
msgid "Your command-line should therefore look something like:"
Packit 1470ea
msgstr "因此,您的命令行应该类似于:"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:32(programlisting)
Packit 1470ea
#, no-wrap
Packit 1470ea
msgid ""
Packit 1470ea
"\n"
Packit 1470ea
"valgrind --tool=massif --depth=5  --alloc-fn=g_malloc --alloc-fn=g_realloc --alloc-fn=g_try_malloc \\\n"
Packit 1470ea
"         --alloc-fn=g_malloc0 --alloc-fn=g_mem_chunk_alloc same-gnome\n"
Packit 1470ea
"        "
Packit 1470ea
msgstr ""
Packit 1470ea
"\n"
Packit 1470ea
"valgrind --tool=massif --depth=5  --alloc-fn=g_malloc --alloc-fn=g_realloc --alloc-fn=g_try_malloc \\\n"
Packit 1470ea
"         --alloc-fn=g_malloc0 --alloc-fn=g_mem_chunk_alloc same-gnome\n"
Packit 1470ea
"        "
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:36(para)
Packit 1470ea
msgid ""
Packit 1470ea
"<application>Same GNOME</application> is the program we will be using as an "
Packit 1470ea
"example. Be warned that, since valgrind emulates the CPU, it will run "
Packit 1470ea
"<emphasis>very</emphasis> slowly. You will also need a lot of memory."
Packit 1470ea
msgstr ""
Packit 1470ea
"<application>Same GNOME</application> 是我们用来作为范例的程序。必须要警告:"
Packit 1470ea
"因为 valgrind 仿真 CPU,它运行得将会<emphasis>非常</emphasis> 慢,同时也需要"
Packit 1470ea
"很多内存。"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:41(title)
Packit 1470ea
msgid "Interpreting the Results"
Packit 1470ea
msgstr "对结果的解释"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:42(para)
Packit 1470ea
#, fuzzy
Packit 1470ea
msgid ""
Packit 1470ea
"The graphical output of <application>Massif</application> is largely self "
Packit 1470ea
"explanatory. Each band represents the memory allocated by one function over "
Packit 1470ea
"time. Once you identify which bands are using the most memory, usually the "
Packit 1470ea
"big thick ones at the top you will have to consult the text file for the "
Packit 1470ea
"details."
Packit 1470ea
msgstr "<application>Massif</application> 的输出很大程度上是自解释的。"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:45(para)
Packit 1470ea
msgid ""
Packit 1470ea
"The text file is arranged as a hierarchy of sections, at the top is a list "
Packit 1470ea
"of the worst memory users arranged in order of decreasing spacetime. Below "
Packit 1470ea
"this are further sections, each breaking the results down into finer detail "
Packit 1470ea
"as you proceed down the call-stack. To illustrate this we will use the "
Packit 1470ea
"output of the command above."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:49(title)
Packit 1470ea
msgid ""
Packit 1470ea
"<application>Massif</application> output for the unoptimized version of the "
Packit 1470ea
"<application>Same GNOME</application> program."
Packit 1470ea
msgstr ""
Packit 1470ea
"未优化版本的 <application>Same GNOME</application> 程序的 "
Packit 1470ea
"<application>Massif</application> 输出。"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:56(para)
Packit 1470ea
msgid ""
Packit 1470ea
"<xref linkend=\"optimization-massif-FIG-output-unoptimized\"/> shows a "
Packit 1470ea
"typical postscript output from <application>Massif</application>. This is "
Packit 1470ea
"the result you would get from playing a single game of <application>Same "
Packit 1470ea
"GNOME</application> (version 2.8.0) and then quitting. The postscript file "
Packit 1470ea
"will have a name like <filename>massif.12345.ps</filename> and the text file "
Packit 1470ea
"will be called <filename>massif.12345.txt</filename>. The number in the "
Packit 1470ea
"middle is the process ID of the program that was examined. If you actually "
Packit 1470ea
"try this example you will find two versions of each file, with slightly "
Packit 1470ea
"different numbers, this is because <application>Same GNOME</application> "
Packit 1470ea
"starts a second process and <application>Massif</application> follows that "
Packit 1470ea
"too. We will ignore this second process, it consumes very little memory."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:59(para)
Packit 1470ea
msgid ""
Packit 1470ea
"At the top of the graph we see a large yellow band labelled gdk_pixbuf_new. "
Packit 1470ea
"This seems like an ideal candidate for optimization, but we will need to use "
Packit 1470ea
"the text file to find out what is calling gdk_pixbuf_new. The top of the "
Packit 1470ea
"text file will look something like this:"
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:62(programlisting)
Packit 1470ea
#, no-wrap
Packit 1470ea
msgid ""
Packit 1470ea
"\n"
Packit 1470ea
"Command: ./same-gnome \n"
Packit 1470ea
"\n"
Packit 1470ea
"== 0 ===========================\n"
Packit 1470ea
"Heap allocation functions accounted for 90.4% of measured spacetime\n"
Packit 1470ea
"\n"
Packit 1470ea
"Called from:\n"
Packit 1470ea
"  28.8% : 0x6BF83A: gdk_pixbuf_new (in /usr/lib/libgdk_pixbuf-2.0.so.0.400.9)\n"
Packit 1470ea
"\n"
Packit 1470ea
"    6.1% : 0x5A32A5: g_strdup (in /usr/lib/libglib-2.0.so.0.400.6)\n"
Packit 1470ea
"\n"
Packit 1470ea
"    5.9% : 0x510B3C: (within /usr/lib/libfreetype.so.6.3.7)\n"
Packit 1470ea
"\n"
Packit 1470ea
"    3.5% : 0x2A4A6B: __gconv_open (in /lib/tls/libc-2.3.3.so)\n"
Packit 1470ea
"        "
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:77(para)
Packit 1470ea
msgid ""
Packit 1470ea
"The line with the '=' signs indicates how far down the stack trace we are, "
Packit 1470ea
"in this case we are at the top. After this it lists the heaviest users of "
Packit 1470ea
"memory in order of decreasing spacetime. Spacetime is the product of the "
Packit 1470ea
"amount of memory used and how long it was used for. It corresponds to the "
Packit 1470ea
"area of the bands in the graph. This part of the file tells us what we "
Packit 1470ea
"already know: most of the spacetime is dedicated to gdk_pixbuf_new. To find "
Packit 1470ea
"out what called gdk_pixbuf_new we need to search further down the text file:"
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:80(programlisting)
Packit 1470ea
#, no-wrap
Packit 1470ea
msgid ""
Packit 1470ea
"\n"
Packit 1470ea
"== 4 ===========================\n"
Packit 1470ea
"Context accounted for 28.8% of measured spacetime\n"
Packit 1470ea
"  0x6BF83A: gdk_pixbuf_new (in /usr/lib/libgdk_pixbuf-2.0.so.0.400.9)\n"
Packit 1470ea
"  0x3A998998: (within /usr/lib/gtk-2.0/2.4.0/loaders/libpixbufloader-png.so)\n"
Packit 1470ea
"  0x6C2760: (within /usr/lib/libgdk_pixbuf-2.0.so.0.400.9)\n"
Packit 1470ea
"  0x6C285E: gdk_pixbuf_new_from_file (in /usr/lib/libgdk_pixbuf-2.0.so.0.400.9)\n"
Packit 1470ea
"\n"
Packit 1470ea
"Called from:\n"
Packit 1470ea
"  27.8% : 0x804C1A3: load_scenario (same-gnome.c:463)\n"
Packit 1470ea
"\n"
Packit 1470ea
"    0.9% : 0x3E8095E: (within /usr/lib/libgnomeui-2.so.0.792.0)\n"
Packit 1470ea
"\n"
Packit 1470ea
"  and 1 other insignificant place\n"
Packit 1470ea
"        "
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:95(para)
Packit 1470ea
msgid ""
Packit 1470ea
"The first line tells us we are now four levels deep into the stack. Below it "
Packit 1470ea
"is a listing of the function calls that leads from here to gdk_pixbuf_new. "
Packit 1470ea
"Finally there is a list of functions that are at the next level down and "
Packit 1470ea
"call these functions. There are, of course, also entries for levels 1, 2, "
Packit 1470ea
"and 3, but this is the first level to reach right down through the GDK code "
Packit 1470ea
"to the <application>Same GNOME</application> code. From this listing, we can "
Packit 1470ea
"see instantly that the problem code is load_scenario."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:98(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Now that we know what part of our code is using all the spacetime we can "
Packit 1470ea
"look at it and find out why. It turns out that the load_scenario is loading "
Packit 1470ea
"a pixbuf from file and then never freeing that memory. Having identified the "
Packit 1470ea
"problem code, we can start to fix it."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:103(title)
Packit 1470ea
msgid "Acting on the Results"
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:104(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Reducing spacetime consumption is good, but there are two ways of reducing "
Packit 1470ea
"it and they are not equal. You can either reduce the amount of memory "
Packit 1470ea
"allocated, or reduce the amount of time it is allocated for. Consider for a "
Packit 1470ea
"moment a model system with only two processes running. Both processes use up "
Packit 1470ea
"almost all the physical RAM and if they overlap at all then the system will "
Packit 1470ea
"swap and everything will slow down. Obviously if we reduce the memory usage "
Packit 1470ea
"of each process by a factor of two then they can peacefully coexist without "
Packit 1470ea
"the need for swapping. If instead we reduce the time the memory is allocated "
Packit 1470ea
"by a factor of two then the two programs can coexist, but only as long as "
Packit 1470ea
"their periods of high memory use don't overlap. So it is better to reduce "
Packit 1470ea
"the amount of memory allocated."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:107(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Unfortunately, the choice of optimization is also constrained by the needs "
Packit 1470ea
"of the program. The size of the pixbuf data in <application>Same GNOME</"
Packit 1470ea
"application> is determined by the size of the game's graphics and cannot be "
Packit 1470ea
"easily reduced. However, the amount of time it spends loaded into memory can "
Packit 1470ea
"be drastically reduced. 
Packit 1470ea
"optimized\"/> shows the <application>Massif</application> analysis of "
Packit 1470ea
"<application>Same GNOME</application> after being altered to dispose of the "
Packit 1470ea
"pixbufs once the images have been loaded into the X server."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:111(title)
Packit 1470ea
msgid ""
Packit 1470ea
"<application>Massif</application> output for the optimized <application>Same "
Packit 1470ea
"GNOME</application> program."
Packit 1470ea
msgstr ""
Packit 1470ea
"优化后的 <application>Same GNOME</application> 程序的 <application>Massif</"
Packit 1470ea
"application> 输出。"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:118(para)
Packit 1470ea
msgid ""
Packit 1470ea
"The spacetime use of gdk_pixbuf_new is now a thin band that only spikes "
Packit 1470ea
"briefly (it is now the sixteenth band down and shaded magenta). As a bonus, "
Packit 1470ea
"the peak memory use has dropped by 200 kB since the spike occurs before "
Packit 1470ea
"other memory is allocated. If two processes like this where run together the "
Packit 1470ea
"chances of the peak memory usage coinciding, and hence the risk of swapping, "
Packit 1470ea
"would be quite low."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:121(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Can we do better ? A quick examination of <application>Massif</"
Packit 1470ea
"application>'s text output reveals: g_strdup to be the new major offender."
Packit 1470ea
msgstr ""
Packit 1470ea
"我们可以做得更好吗?快速检查 <application>Massif</application> 的文本输出揭"
Packit 1470ea
"示:g_strdup 是新的主犯。"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:124(programlisting)
Packit 1470ea
#, no-wrap
Packit 1470ea
msgid ""
Packit 1470ea
"\n"
Packit 1470ea
"Command: ./same-gnome \n"
Packit 1470ea
"\n"
Packit 1470ea
"== 0 ===========================\n"
Packit 1470ea
"Heap allocation functions accounted for 87.6% of measured spacetime\n"
Packit 1470ea
"\n"
Packit 1470ea
"Called from:\n"
Packit 1470ea
"    7.7% : 0x5A32A5: g_strdup (in /usr/lib/libglib-2.0.so.0.400.6)\n"
Packit 1470ea
"\n"
Packit 1470ea
"    7.6% : 0x43BC9F: (within /usr/lib/libgdk-x11-2.0.so.0.400.9)\n"
Packit 1470ea
"\n"
Packit 1470ea
"    6.9% : 0x510B3C: (within /usr/lib/libfreetype.so.6.3.7)\n"
Packit 1470ea
"\n"
Packit 1470ea
"    5.2% : 0x2A4A6B: __gconv_open (in /lib/tls/libc-2.3.3.so)\n"
Packit 1470ea
"        "
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:139(para)
Packit 1470ea
msgid ""
Packit 1470ea
"If we look closer though we see that it is called from many, many, places."
Packit 1470ea
msgstr "如果我们更自习的查看,我们发现它从很多很多地方调用。"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:142(programlisting)
Packit 1470ea
#, no-wrap
Packit 1470ea
msgid ""
Packit 1470ea
"\n"
Packit 1470ea
"== 1 ===========================\n"
Packit 1470ea
"Context accounted for  7.7% of measured spacetime\n"
Packit 1470ea
"  0x5A32A5: g_strdup (in /usr/lib/libglib-2.0.so.0.400.6)\n"
Packit 1470ea
"\n"
Packit 1470ea
"Called from:\n"
Packit 1470ea
"    1.8% : 0x8BF606: gtk_icon_source_copy (in /usr/lib/libgtk-x11-2.0.so.0.400.9)\n"
Packit 1470ea
"\n"
Packit 1470ea
"    1.1% : 0x67AF6B: g_param_spec_internal (in /usr/lib/libgobject-2.0.so.0.400.6)\n"
Packit 1470ea
"\n"
Packit 1470ea
"    0.9% : 0x91FCFC: (within /usr/lib/libgtk-x11-2.0.so.0.400.9)\n"
Packit 1470ea
"\n"
Packit 1470ea
"    0.8% : 0x57EEBF: g_quark_from_string (in /usr/lib/libglib-2.0.so.0.400.6)\n"
Packit 1470ea
"\n"
Packit 1470ea
"  and 155 other insignificant places\n"
Packit 1470ea
"        "
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:158(para)
Packit 1470ea
msgid ""
Packit 1470ea
"We now face diminishing returns for our optimization efforts. The graph "
Packit 1470ea
"hints at another possible approach: Both the \"other\" and \"heap admin\" "
Packit 1470ea
"bands are quite large. This tells us that there are a lot of small "
Packit 1470ea
"allocations are being made from a variety of places. Eliminating these will "
Packit 1470ea
"be difficult, but if they can be grouped then the individual allocations can "
Packit 1470ea
"be larger and the \"heap admin\" overhead can be reduced."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:163(title)
Packit 1470ea
msgid "Caveats"
Packit 1470ea
msgstr "注意事项"
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:164(para)
Packit 1470ea
msgid ""
Packit 1470ea
"There are a couple of things to watch out for: Firstly, spacetime is only "
Packit 1470ea
"reported as a percentage, you have to compare it to the overall size of the "
Packit 1470ea
"program to decide if the amount of memory is worth pursuing. The graph, with "
Packit 1470ea
"its kilobyte vertical axis, is good for this."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-massif.xml:167(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Secondly, <application>Massif</application> only takes into account the "
Packit 1470ea
"memory used by your own program. Resources like pixmaps are stored in the X "
Packit 1470ea
"server and aren't considered by <application>Massif</application>. In the "
Packit 1470ea
"<application>Same GNOME</application> example we have actually only moved "
Packit 1470ea
"the memory consumption from client-side pixbufs to server-side pixmaps. Even "
Packit 1470ea
"though we cheated there are performance gains. Keeping the image data in the "
Packit 1470ea
"X server makes the graphics routines quicker and removes a lot of inter-"
Packit 1470ea
"process communication. Also, the pixmaps will be stored in a native graphics "
Packit 1470ea
"format which is often more compact than the 32-bit RGBA format used by "
Packit 1470ea
"gdk_pixbuf. To measure the effect of pixmaps, and other X resources use the "
Packit 1470ea
"
Packit 1470ea
"\">xrestop</ulink> program."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-harmful.xml:3(title)
Packit 1470ea
msgid "Disk Seeks Considered Harmful"
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-harmful.xml:5(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Disk seeks are one of the most expensive operations you can possibly "
Packit 1470ea
"perform. You might not know this from looking at how many of them we "
Packit 1470ea
"perform, but trust me, they are. Consequently, please refrain from the "
Packit 1470ea
"following suboptimal behavior:"
Packit 1470ea
msgstr ""
Packit 1470ea
"磁盘寻道是您可能遇到的最昂贵的操作之一。从查看执行的数量,可能不能了解到,但"
Packit 1470ea
"这是真的。相应地,请避免如下次优的选择:"
Packit 1470ea
Packit 1470ea
#: C/optimization-harmful.xml:10(para)
Packit 1470ea
msgid "Placing lots of small files all over the disk."
Packit 1470ea
msgstr "在磁盘中到处存放很多小文件。"
Packit 1470ea
Packit 1470ea
#: C/optimization-harmful.xml:15(para)
Packit 1470ea
msgid "Opening, stating, and reading lots of files all over the disk"
Packit 1470ea
msgstr "在磁盘中,到处打开、查看、读取很多小文件。"
Packit 1470ea
Packit 1470ea
#: C/optimization-harmful.xml:20(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Doing the above on files that are laid out at different times, so as to "
Packit 1470ea
"ensure that they are fragmented and cause even more seeking."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-harmful.xml:25(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Doing the above on files that are in different directories, so as to ensure "
Packit 1470ea
"that they are in different cylinder groups and and cause even more seeking."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-harmful.xml:30(para)
Packit 1470ea
msgid "Repeatedly doing the above when it only needs to be done once."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-harmful.xml:35(para)
Packit 1470ea
msgid "Ways in which you can optimize your code to be seek-friendly:"
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-harmful.xml:40(para)
Packit 1470ea
msgid "Consolidate data into a single file."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-harmful.xml:45(para)
Packit 1470ea
msgid "Keep data together in the same directory."
Packit 1470ea
msgstr "将数据保持在同一个目录中。"
Packit 1470ea
Packit 1470ea
#: C/optimization-harmful.xml:50(para)
Packit 1470ea
msgid "Cache data so as to not need to reread constantly."
Packit 1470ea
msgstr "缓存数据以避免定期重读数据。"
Packit 1470ea
Packit 1470ea
#: C/optimization-harmful.xml:55(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Share data so as not to have to reread it from disk when each application "
Packit 1470ea
"loads."
Packit 1470ea
msgstr "共享数据以便不必每个程序需要时都从硬盘读取。"
Packit 1470ea
Packit 1470ea
#: C/optimization-harmful.xml:60(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Consider caching all of the data in a single binary file that is properly "
Packit 1470ea
"aligned and can be mmaped."
Packit 1470ea
msgstr ""
Packit 1470ea
"考虑将所有的数据缓存在单个二进制文件中,并使文件正确对齐并可以将其 mmap。"
Packit 1470ea
Packit 1470ea
#: C/optimization-harmful.xml:65(para)
Packit 1470ea
msgid ""
Packit 1470ea
"The trouble with disk seeks are compounded for reads, which is unfortunately "
Packit 1470ea
"what we are doing. Remember, reads are generally synchronous while writes "
Packit 1470ea
"are asynchronous. This only compounds the problem, serializing each read, "
Packit 1470ea
"and contributing to program latency."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:5(title)
Packit 1470ea
msgid "Optimizing GNOME Software"
Packit 1470ea
msgstr "优化 GNOME 软件"
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:8(publishername) C/optimization-guide.xml:56(para)
Packit 1470ea
msgid "GNOME Documentation Project"
Packit 1470ea
msgstr "GNOME 文档项目"
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:11(year) C/optimization-guide.xml:15(year)
Packit 1470ea
msgid "2004-2005"
Packit 1470ea
msgstr "2004-2005"
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:12(holder)
Packit 1470ea
msgid "Callum McKenzie"
Packit 1470ea
msgstr "Callum McKenzie"
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:16(holder)
Packit 1470ea
msgid "Robert Love"
Packit 1470ea
msgstr "Robert Love"
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:20(firstname)
Packit 1470ea
msgid "Callum"
Packit 1470ea
msgstr "Callum"
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:21(surname)
Packit 1470ea
msgid "McKenzie"
Packit 1470ea
msgstr "McKenzie"
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:24(firstname)
Packit 1470ea
msgid "Robert"
Packit 1470ea
msgstr "Robert"
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:25(surname)
Packit 1470ea
msgid "Love"
Packit 1470ea
msgstr "Love"
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:29(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Permission is granted to copy, distribute and/or modify this document under "
Packit 1470ea
"the terms of the <citetitle>GNU Free Documentation License</citetitle>, "
Packit 1470ea
"Version 1.1 or any later version published by the Free Software Foundation "
Packit 1470ea
"with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. "
Packit 1470ea
"You may obtain a copy of the <citetitle>GNU Free Documentation License</"
Packit 1470ea
"citetitle> from the Free Software Foundation by visiting 
Packit 1470ea
"\" url=\"http://www.fsf.org\">their Web site</ulink> or by writing to: Free "
Packit 1470ea
"Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-"
Packit 1470ea
"1307, USA."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:41(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Many of the names used by companies to distinguish their products and "
Packit 1470ea
"services are claimed as trademarks. Where those names appear in any GNOME "
Packit 1470ea
"documentation, and those trademarks are made aware to the members of the "
Packit 1470ea
"GNOME Documentation Project, the names have been printed in caps or initial "
Packit 1470ea
"caps."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:52(revnumber)
Packit 1470ea
msgid "0.1"
Packit 1470ea
msgstr "0.1"
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:53(date)
Packit 1470ea
msgid "November 2007"
Packit 1470ea
msgstr "2007年11月"
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:55(para)
Packit 1470ea
msgid "William Johnston"
Packit 1470ea
msgstr "William Johnston"
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:57(para)
Packit 1470ea
msgid "Intial conversion to docbook format."
Packit 1470ea
msgstr "初始转换到 docbook 格式。"
Packit 1470ea
Packit 1470ea
#: C/optimization-guide.xml:63(para)
Packit 1470ea
msgid ""
Packit 1470ea
"Software can be optimized in many ways: for speed, program size, or memory "
Packit 1470ea
"use. This section contains guides and tutorials for optimizing your software."
Packit 1470ea
msgstr ""
Packit 1470ea
Packit 1470ea
#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
Packit 1470ea
#: C/optimization-guide.xml:0(None)
Packit 1470ea
msgid "translator-credits"
Packit 1470ea
msgstr "YunQiang Su <wzssyqa@gmail.com>, 2010"