#wpf #canvas #memory-management #f#
#wpf #холст #управление памятью #f#
Вопрос:
Вопрос: Может ли WPF Canvas отображать один и тот же дочерний элемент или объект в нескольких разных местах или каждый дочерний элемент / объект должен быть уникальным?
У меня есть холст WPF, на который я рисую большое количество объектов. Большинство из них представляют собой изображения, многие из которых идентичны, и, насколько я знаю, каждое из них должно быть уникально создано, поскольку холст, по-видимому, не может рисовать (или, скорее Children.Add()
, ) идентичное изображение в нескольких разных местах (если только нет способа сделать это — что было бы предпочтительнее). Я вынужден System.GC.Collect()
несколько раз выполнять руководство после того, как все объекты нарисованы, чтобы уменьшить объем памяти до разумного размера (по крайней мере, для проекта WPF).Объем памяти увеличивается примерно с 80 МБ перед рисованием изображений до примерно 225 МБ сразу после этого и не уменьшается до System.GC.Collect()
тех пор, пока не будет запущен несколько раз, снова возвращаясь к ~ 80 МБ.
Я также делаю это программно в F #, и поэтому я не использую какой-либо простой XAML, если это имеет какое-либо значение.
Комментарии:
1. Как вы уже заметили, дочерние элементы, добавляемые в холст, должны быть уникальными UIElements. Кроме того, в вашем вопросе недостаточно информации, чтобы добавить дополнительные рекомендации. Если, например, «идентичные изображения», которые рисуются в «разных местах», образуют сетку, вы, возможно, можете поместить наиболее часто используемое изображение в ImageBrush с соответствующим tileMode.
2. Вероятно, вы просто хотите выполнить свой собственный рендеринг, чтобы избежать создания всего этого объекта. Проверьте, например, wpf.2000things.com/2011/03/05 /. …