为什么字体不可变?

2023-12-29

字体不可变让程序员和 GC 都感到苦恼,因为每次都需要创建一个新实例。

那么为什么 Font 是不可变的引用类型呢?


它简化了渲染系统的使用。

如果框架允许 Font 可变,则需要检测更改,并定期修改其渲染方式。由于 Font 创建了本机资源,因此保持其不可变可以防止系统担心必须在内部重复重新创建句柄。

另外,我不同意“程序员的苦恼”。通过使 Font 不可变,可以使用户创建 Font 对象时发生的情况更加明显。如果你想要一个新的 Font,你需要创建一个新的 Font 对象,该对象又创建新的原生字体资源。使 Font 不可变可以更清楚地了解正在发生的事情 - 您不太可能意外地造成性能问题。

如果 Font 是可变的,则在更改 Font 属性时重复创建句柄的情况就不那么明显了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么字体不可变? 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri

随机推荐

  • pip install 命令出错,退出状态为 1

    我有这个requirments txt file confluent kafka avro 1 1 0 当我运行命令时 pip3 install r requirments txt 这是我收到的错误 ERROR Command errore
  • canFetchMore() 和 fetchMore() 未按预期工作

    我在使用延迟加载实现 Qt 树模型时遇到问题canFetchMore and fetchMore 我有这个代码 from PySide QtCore import Qt QAbstractItemModel QModelIndex from
  • NSFetchedResultsController 提供表视图,同时同一持久存储的后台更新导致死锁

    仍在致力于将应用程序从每次使用或显示信息时下载信息 转变为使用 CoreData 将其缓存在手机上 由 MagicalRecord 提供 这是在 iOS 7 上 因为我们没有设置数据推送系统来在后端的某些数据发生变化时自动更新手机的缓存数据
  • 我应该在 Gradle 依赖项中添加什么?

    我的项目中有多项活动 但我在 Gradle 中没有任何依赖项 我有这些进口 我在这些导入中遇到错误 例如 Appcompat appcompatActivity 等等 import androidx appcompat app AppCom
  • 从挂起的 Intent 启动的 Intent getExtra

    我试图在用户从列表中选择带有时间的内容后发出一些警报 并在给定时间为其创建通知 我的问题是广播接收器无法接收我的 Intent 上的 putExtra 的 showname 它总是得到空值 这是我大多数意图的做法 但我认为这次可能是因为pe
  • TypeScript var 与 import

    在 TypeScript 中 有什么区别 import http require http and var http require http 我看到这两种方式都在代码源中使用 它们可以互换吗 Your import语句是 TypeScri
  • Sandy-Bridge CPU规格

    我能够将有关 Sandy Bridge E 架构的一些信息整合在一起 但我并不完全确定所有参数 例如L2 缓存的大小 任何人都可以确认它们都是正确的吗 我的主要来源是64 ia 32 架构 优化 手册 pdf http www intel
  • 按需加载/卸载 ELF 部分?

    对于一个相当晦涩的用例 我想要一个 大型 静态链接的 Linux 可执行文件 由一小段控制代码和大段静态 只读 数据组成 为了节省内存 是否可以让加载器仅加载控制代码的部分 然后根据需要手动加载 RO 数据的部分 并在处理完成后再次卸载它们
  • 在四开本中使用 kable 在表格中使用 Markdown 格式

    使用 quarto 的 HMTL 输出功能 我尝试从 data frame 生成一个 kable 其中包含一些应显示在最终文档中的 Markdown 样式格式 在实际用例中 我有许多文档已经以这种方式格式化 我想重新使用这些命令来正确呈现输
  • 删除gridview选择器列

    我确信这个问题的答案是非常明显的 但是对于我来说 我无法弄清楚如何从默认的 winforms gridview 中删除 选择器 列 红色箭头所指的列 我尝试过以编程方式删除该列gridview Columns 0 Remove但这只是删除了
  • iOS 模拟器恢复位置设置

    我正在调试 gt 位置 gt 自定义位置下使用自定义位置 虽然此设置对我来说效果很好 但模拟器经常将我的设置从 自定义位置 更改为 无 此恢复似乎没有模式 因为我可能会运行同一个项目 5 或 10 次而不会恢复设置 有时 我每运行 1 或
  • 检测客户端设备是否支持 :hover 和 :focus 状态

    听起来像是一个简单的问题 但事实证明解决起来相当具有挑战性 对于某些网站 我的内容仅在用户悬停 聚焦链接时才会显示 然而 该链接本身有一个目标 如果触摸屏用户点击其中一个链接 浏览器会立即转到href地点 这意味着悬停内容永远不可见 这就是
  • 需要使用java将EMF转换为jpeg,png文件格式

    我需要使用完整的java代码将emf wmf文件格式转换为png或jpeg 因为某些浏览器不支持这些格式 任何人都可以指导我 提前致谢 最快的方法可能是使用图像魔法 http www imagemagick org 确实如此support
  • MapFragment和Camera似乎在同一个Activity中互相干扰

    我正在尝试将 Google Maps Android API v2 中的 MapFragment 与相机预览结合使用 我需要能够在相机预览和 MapFragment 之间切换 但我无法使其工作 对于相机预览 我从以下位置复制了 Camera
  • 如何将 Bash 数组的元素连接到分隔字符串中?

    如果我在 Bash 中有一个这样的数组 FOO a b c 如何用逗号连接元素 例如 生产a b c 支持多字符分隔符的 100 纯 Bash 函数是 function join by local d 1 f 2 if shift 2 th
  • 使用 shell 脚本自动传输 scp 文件

    我的 UNIX 系统上的一个目录中有 n 个文件 有没有办法编写一个 shell 脚本 通过 scp 将所有这些文件传输到指定的远程系统 我将在脚本中指定密码 这样我就不必为每个文件输入密码 使用 SSH 密钥 而不是在 shell 脚本中
  • 如何使用破折号创建 shell 变量?

    在 Linux 环境中 我想创建一个带有破折号的变量名 这是可能的 因为我可以在詹金斯中设置一个类似的名称 为此env给出输出 以及其他行 variable with dashes test 但如何直接在 shell 上做到这一点呢 正在做
  • Zend:表单验证:在干草堆错误中找不到值

    我有一个有 2 个选择的表格 根据第一个选择的值 它使用 AJAX 更新第二个选择的值 这样做会使表格无效 所以 我做了下一个改变 form this gt getAddTaskForm the form if form gt isVali
  • 如何按键对字典进行排序?

    如何按字典键对字典进行排序 输入示例 2 3 1 89 4 5 3 0 期望的输出 1 89 2 3 3 0 4 5 Note 对于 Python 3 7 请参阅这个答案 https stackoverflow com a 47017849
  • 为什么字体不可变?

    字体不可变让程序员和 GC 都感到苦恼 因为每次都需要创建一个新实例 那么为什么 Font 是不可变的引用类型呢 它简化了渲染系统的使用 如果框架允许 Font 可变 则需要检测更改 并定期修改其渲染方式 由于 Font 创建了本机资源 因