Есть ли ограничения по количеству дп / до на проект? - PullRequest
1 голос
/ 03 марта 2010

Есть ли какие-либо ограничения по количеству зависимых объектов / зависимых свойств на проект?

отредактировано: или на процесс / домен? Меня интересуют любые ограничения.

Ответы [ 2 ]

4 голосов
/ 03 марта 2010

Количество определенных свойств зависимости

Домен приложения не может иметь более чем 65535 различных DependencyProperties определенных , хотя каждое определенное свойство может применяться ко многим объектам DependencyObjects.

Процесс может иметь несколько доменов приложений, поэтому он может иметь несколько свойств DependencyProperties, ограниченных только оперативной памятью. Поскольку определение DependencyProperty (а не использование!) Занимает около 150 байт, 32-разрядный процесс ограничен примерно 20 миллионами DependencyProperties определено .

Количество созданных DependencyObjects

Процесс или домен приложения могут иметь несколько объектов DependencyObject, ограниченных только оперативной памятью. Минимальный объект DependencyObject требует 64 байта, поэтому в 32-разрядном Process или AppDomain может быть создано около 46 миллионов объектов DependencyObject.

Количество объектов DependencyProperties, примененных к объектам DependencyObjects

У Process или AppDomain может быть несколько DependencyProperties, примененных к DependencyObjects, ограниченных только RAM. Для хранения DependencyProperty в DependencyObject требуется 8 байтов, поэтому 32-битный процесс или домен приложения могут иметь до 375 миллионов настроек DependencyProperty для своих объектов DependencyObjects, в зависимости от использования другой оперативной памяти.

64 бит WPF

Подобные вычисления для 64-битного WPF предполагают следующие ограничения, хотя я их не проверял:

  • 65535 Определения DependencyProperty для AppDomain
  • 120 квадриллионов Определения DependencyProperty для процесса
  • 280 квадриллионов DependencyObjects для процесса или домена приложения
  • 2,3 квинтиллиона DependencyProperties фактически установлены для объектов DependencyObjects для процесса или домена приложения

Максимальное количество объектов DependencyProperties и DependencyObjects для проекта

Количество объектов DependencyProperties или DependencyObject, которые могут быть созданы данным проектом, зависит, прежде всего, от времени, в течение которого вы можете заставить кого-то запускать вашу программу, поскольку проект может продолжать создавать домены приложений, полные DependencyProperties и DependencyObjects, и повторно их уничтожать. до тех пор, пока он работает.

Если вселенная существует еще триллион лет, и вы можете попросить кого-нибудь запустить ваш проект на оборудовании, которое по крайней мере так же быстро, как мы используем сегодня, я бы оценил, что вы могли бы создать примерно 1 дециллион DependencyProperties или DependencyObjects за эти триллионы лет, причем все они используют один проект VS.NET.

Если вместо этого мы говорим о количестве DependencyProperties, которые можно добавить в код, проект VS.NET с пользовательскими этапами сборки может теоретически включать любое количество входных файлов и создавать любое количество выходных файлов. Эти файлы могут быть в Интернете, поэтому ограничение - это не количество места для хранения ввода и вывода и не время компиляции: это количество разработчиков, которое требуется для написания всего этого кода. Если у вас есть миллион разработчиков, работающих над вашим единственным проектом в течение триллиона лет, и каждый разработчик может добавить один DependencyProperty к проекту каждые 3 секунды, вы получите около 1 septillion DependencyProperties, определенных в конце триллион лет.

Конечно, все это довольно глупо ... Единственным практическим ограничением является ограничение в 65535 определений DependencyProperty на домен приложения.

Обновление

По правде говоря, даже 65535 DependencyProperties на AppDomain безумно огромны. Каждый DP соответствует концептуально отдельной функции приложения. Весь WPF, Blend и VS.NET 2010 вместе содержат менее 1000 DP.

Приложение, использующее все 65535 доступных DP, будет содержать несколько сотен миллионов строк кода и не будет помещаться в 32-разрядное адресное пространство или быть разработанным кем-либо, кроме компании на миллиард долларов.

Таким образом, опасность исчерпания DependencyProperties в любом приложении, выпущенном в течение следующих десяти лет, практически отсутствует. Исключением будет случай, если разработчик неправильно использует свойства DependencyProperties, создавая их на лету в своем коде.

1 голос
/ 03 марта 2010

Вероятно, существует очень, очень высокий предел количества значений зависимости, которые вы можете иметь в любом процессе (и это число, вероятно, меньше максимального значения normal значения свойств, которые вы можете иметь плавающие), но это не будет для проекта ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...