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 페인트의 브러쉬 도구처럼 작동하도록 새 타원이 생성되고 추가됩니다.WPF에서 캔버스에 많은 자식을 추가 할 때 메모리를 절약 할 수 있습니까?
그러나 너무 많은 메모리를 소비합니다. 잠시 후 프로그램이 느려집니다. 이 문제를 해결할 방법이 있습니까? 캔버스에 추가 할 때 동일한 타원 객체를 재사용 할 수 없습니까?
컨트롤로 "페인트"하지 마십시오. 컨트롤은 제거 될 때까지 제거되고 더 이상 필요하지 않습니다. 같은 타원 객체를 다시 사용하면 단순히 새 위치로 * 이동 *됩니다. – user2864740
감사합니다. 그렇다면 내가 그림을 그릴 때 무엇을 사용해야합니까? InkCanvas에 대해 조사했습니다 ... 올바른 접근입니까 ?? – user3649944
목표가 "강조 표시/추적"하는 것일 경우 간단히 적은 수의 개체를 만듭니다. 백만 번 타원을 추가하는 대신 마우스에 상당한 각도/시간 변경이있을 때마다 팻 경로 획을 추가하십시오. 이것은 추가 된 요소의 속도를 늦추어 모든 감속도 (결국에는 * 될 것임)가 중요하지 않거나 눈에 띄지 않도록해야합니다. – user2864740