gpt4 book ai didi

user-interface - 为什么 GUI 代码的计算成本如此之高?

转载 作者:行者123 更新时间:2023-12-03 23:42:32 25 4
gpt4 key购买 nike

所有你Stackoverflowers,

我想知道为什么 GUI 代码要负责吸走很多很多 cpu 周期。原则上,图形渲染远没有 Doom 复杂(尽管大多数公司的 GUI 会引入大量的装饰)。事件处理层似乎也是一个沉重的成本,然而,一个编写良好的实现似乎应该在具有大量内存/缓存的现代处理器上有效地在上下文之间切换。

如果有人在他们的大型 GUI 应用程序或通用 API 本身上运行了分析器,我会对瓶颈所在的位置感兴趣。

可能的解释(我想象的)可能是:

  • 硬件和应用程序接口(interface)之间的高级抽象
  • 对要执行的正确代码的许多间接级别
  • 低优先级(与其他进程相比)
  • 行为不端的应用程序通过调用淹没 API
  • 过度面向对象?
  • 在 API 中完成糟糕的设计选择(不仅仅是问题,还有设计理念)

  • 一些 GUI 框架比其他框架好得多,所以我想听听不同的观点。例如,Unix/X11 系统与 Windows 甚至与 WinForms 有很大不同。

    编辑:现在是一个社区维基 - 去吧。我还有一件事要补充——我是学校里的一名算法专家,如果 GUI 代码中存在低效的算法以及它们是什么算法,我会很感兴趣。再说一次,这可能只是实现开销。

    最佳答案

    我一般不知道,但我想在您的列表中添加另一个项目 - 字体渲染和计算。在字体中找到矢量字形并将它们转换为具有抗锯齿的位图表示并非易事。并且通常需要执行两次 - 首先计算文本的宽度/高度以进行定位,然后在正确的坐标处实际绘制文本。

    此外,当今大多数绘图代码都依赖于裁剪机制来更新 GUI 的一部分。所以,如果只需要重绘一部分,代码实际上会在后台重绘整个窗口,然后只取需要的部分进行实际更新。

    补充:

    在评论中我发现了这个:

    I'm also very interested in this. It can't be that the gui is rendered using only the cpu because if you don't have proper drivers for your gfx-card, desktop graphics render incredibly slow. If you have gfx-drivers however desktop-gfx go kinda fast but never as fast as a directx/opengl app.



    这是我理解的交易:今天的每张显卡都支持通用的绘图界面。我不确定它是否被称为“VESA”、“SVGA”,或者这些只是过去的旧名称。无论如何,这个接口(interface)涉及通过中断做所有事情。对于每个像素,都有一个中断调用。或类似的东西。然而,正确的 VGA 驱动程序能够利用 DMA 和其他增强功能,使整个过程的 CPU 密集度降低。

    新增2:啊,对于 OpenGL/DirectX - 这是当今显卡的另一个特性。它们针对独占模式下的 3D 操作进行了优化。这就是为什么速度。普通的 GUI 只使用基本的 2D 绘图程序。因此,它每次想要更新时都会发送整个屏幕的内容。然而,3D 应用程序将一堆纹理和三角形定义发送到 VRAM(视频 RAM),然后将它们重新用于绘图。他们只是说“将三角形集#38 与纹理集#25 并绘制它们”。所有这些东西都缓存在 VRAM 中,所以这又快了很多。

    我不确定,但我怀疑现代 3D 加速 GUI(Vista Aero、Linux 上的 compiz 等)也可能会利用这一点。他们可以预先将通用位图发送到 VGA,然后直接从 VRAM 中重用它们。然而,任何应用程序绘制的表面仍然需要每次都直接发送以进行更新。

    新增 3:更多想法。 :) 用于 Windows、Linux 等的现代 GUI 是面向小部件的(即面向 Windows 扬声器的控制)。这样做的问题是每个小部件都有自己的绘图代码和相关的绘图表面(或多或少)。当窗口需要重绘时,它会调用其所有子窗口小部件的绘图代码,而这些子窗口小部件又会调用其子窗口小部件的绘图代码等。每个窗口小部件都会重绘其整个表面,即使其中一些被遮挡由其他小部件。使用上面提到的裁剪技术,一些绘制的信息会立即被丢弃,以减少闪烁和其他伪影。但仍然有很多手动绘图代码,包括位图 block 状、拉伸(stretch)、倾斜、绘制线条、文本、填充等。所有这些都被转换为一系列 putpixel 调用,这些调用通过剪切过滤器/蒙版和其他过滤器进行过滤东西。啊,是的,Alpha 混合在今天也很流行,因为效果很好,这意味着更多的工作。所以......是的,你可以说这是因为大量的抽象和间接。但是……你真的能做得更好吗?我不这么认为。只有 3D 技术可能会有所帮助,因为它们利用 GPU 进行 alpha 计算和裁剪。

    关于user-interface - 为什么 GUI 代码的计算成本如此之高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/502483/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com