gpt4 book ai didi

c# - 我是否必须继续创建图形对象

转载 作者:行者123 更新时间:2023-11-30 13:19:06 25 4
gpt4 key购买 nike

我是一名老 delphi 程序员,我习惯于创建对象并一直使用它们以提高内存使用率。但是在 C# 中(也许是我见过的所有教程),你每次都在用 new 创建东西(感谢垃圾收集器!!,让我来编码)。

无论如何,我正在尝试创建一个包含大量绘图的设计软件。我的问题是:我是否必须创建一个图形对象,或者使用 protected override void OnPaint(PaintEventArgs e) e.Graphics every painting event.. 因为当我创建一个图形对象然后调整我绘制的控件,我创建的图形对象,有裁剪问题并且只绘制旧的矩形区域..

谢谢

最佳答案

当对象的创建成本高、存储成本低且保持更新相对简单时,缓存对象是有意义的。 Graphics 对象的独特之处在于这些条件都不为真:

  • 它的创建成本非常低,不到一微秒。
  • 存储非常昂贵,底层设备上下文存储在 session 的桌面堆中。可以存储的对象数量很少,不超过 65535 个。 session 中运行的所有程序共享该堆。
  • 很难保持更新,在您背后发生的事情会使设备上下文无效。就像用户或您的程序更改窗口大小一样,使 Graphics.ClipBounds 属性无效。您正在浪费使用正确的 Graphics 对象的机会,该对象是在 Paint 事件处理程序中传递给您的。当您使用双缓冲时,尤其是错误工厂。

缓存 Graphics 对象是一个错误。

关于c# - 我是否必须继续创建图形对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31099099/

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