当前位置: 首页 > 知识库问答 >
问题:

当我在WPF的画布上添加许多子级时,有没有办法节省内存?

谭畅
2023-03-14
void MainWindow_MouseMove(object sender, MouseEventArgs e)
{
   Ellipse el = new Ellipse();

   el.Fill = ellipse.Fill;
   el.Width = ellipse.Width;
   el.Height = ellipse.Height;

   Point p = e.GetPosition(this.canvasPrint);
   Canvas.SetLeft(el, p.X);
   Canvas.SetTop(el, p.Y);
   canvasPrint.Children.Add(el);
}

这是我制作的程序的示例代码。我正在画布上添加省略号。每个椭圆的点就是鼠标光标的点。当鼠标移动时,将生成并添加一个新的椭圆,使其像MS Paint中的笔刷工具一样工作。

但是,它消耗了太多内存。因此,一段时间后,程序会变慢。有没有办法解决这个问题?当我将同一个椭圆对象添加到画布上时,我不能重用它吗?

共有1个答案

吴高洁
2023-03-14

您应该使用DrawingVisualDrawingContext来绘制您的画笔路径。DrawingContext类似于Windows FormsGraphics对象。所以在您的情况下,只需在同一个DrawingContext上绘制您的画笔路径。

 类似资料:
  • 问题内容: 由于某些性能原因,我试图找到一种仅选择所选节点中同级节点的方法。例如, 如果选择了inner1节点,是否可以访问其兄弟节点? 问题答案: 好吧…确定…先拜访父母,再拜访孩子。 或者…使用jQuery: 编辑:Cletus一如既往地鼓舞人心。 我进一步挖掘。这就是jQuery本质上如何获得兄弟姐妹的方式:

  • 问题内容: 我知道可以用来从外壳检查给定的二进制文件,但是有可能在一个进程中执行此操作吗? 类似于(我完全组成了系统调用): 我正在尝试在我们的代码库中诊断一些可疑的SO链接问题,并且希望在可能的情况下以这种方式检查RPATH(我宁愿不必生成外部脚本)。 问题答案:

  • 我试图在运行时向tomcat添加一个端口。有办法做到这一点吗?或者有没有办法监听所有端口?我使用的是spring,我希望用户能够添加一个APIendpoint调用,以添加一个新的端口来侦听。 我知道您可以在配置文件中添加其他端口,但我不知道我需要添加哪些端口。

  • 问题内容: 在我的不和谐机器人中,我有2个命令来赋予和创建角色。它们工作得很好,但是如果角色名称包含空格,那么我有问题。它将第二个单词计入第二个参数,使命令产生错误。 理想情况下,我应该能够执行类似的操作,但会收到“无效用户”错误。我有什么办法可以在角色名称中支持空格?提前致谢! 问题答案: 您有几种选择: 使用角色转换器并要求提及角色: 要求角色用引号引起来: 切换两个参数的位置,以使转换后的用

  • 问题内容: 在Java中,是否有一种方法(在运行时)获取定义了特定类的字节码? 换句话说,有没有一种方法可以获取在加载特定类时传递给数组的数组?我看到已经声明了此方法,因此似乎无法创建一个自定义类来拦截类定义。 过去,我曾使用该类通过该方法获取字节码,但我希望使用更规范的解决方案。 问题答案: 这是如何实现代理的说明

  • 我正在寻找一种在InitState方法上加载异步数据的方法,在构建方法运行之前,我需要一些数据。我使用的是GoogleAuth代码,我需要执行build方法,直到流运行为止。 我的initState方法是: 如有任何反馈,我将不胜感激。