每个项目的dp / do数量有限制吗?

时间:2010-03-03 13:41:56

标签: wpf

每个项目的dependencyobjectsp / dependencyproperties数量是否有任何限制?

编辑:或每个进程/域?我对任何限制感兴趣。

2 个答案:

答案 0 :(得分:4)

定义的DependencyProperties数量

AppDomain不能超过 65535 不同的DependencyProperties 定义,尽管定义的每个属性都可以应用于许多DependencyObjects。

进程可以有多个AppDomain,因此它可以有多个仅由RAM限制的DependencyProperties。由于DependencyProperty定义(不是用法!)大约需要150个字节,因此32位进程仅限于 2000万 DependencyProperties 定义

已创建的DependencyObject数量

进程或AppDomain可以有许多仅由RAM限制的DependencyObject。最小的DependencyObject需要64个字节,因此32位进程或AppDomain可以创建大约 4600万的DependencyObjects。

应用于DependencyObjects的DependencyProperties的数量

Process或AppDomain可以将多个DependencyProperties应用于仅受RAM限制的DependencyObjects。它需要8个字节来在DependencyObject上存储DependencyProperty,因此32位进程或AppDomain可以在其DependencyObjects上具有最多 3.755亿 DependencyProperty设置,具体取决于其他RAM使用情况。

64位WPF

64位WPF的类似计算会提示以下限制,但我还没有验证它们:

  • 65535 每个AppDomain的DependencyProperty定义
  • 120万亿每个流程的DependencyProperty定义
  • 每个进程或AppDomain的280万亿 DependencyObjects
  • 2.3 quintillion DependencyProperties实际上在每个进程或AppDomain的DependencyObjects上设置

每个项目的DependencyProperties和DependencyObjects的最大数量

可以由给定项目创建的DependencyProperties或DependencyObjects的数量主要取决于您可以让某人运行程序的时间长度,因为项目可以继续创建充满DependencyProperties和DependencyObjects的AppDomain并反复销毁它们只要它运行。

如果宇宙存在了另一万亿年,并且你可以让某人在硬件上运行你的项目,这个硬件至少和我们今天使用的一样快,我估计你可以创建大约 1十亿分之一< / strong> DependencyProperties或DependencyObjects在这万亿年中,都使用单个VS.NET项目。

如果我们谈论可以添加到代码中的DependencyProperties的数量,具有自定义构建步骤的VS.NET项目理论上可以包括任意数量的输入文件并构建任意数量的输出文件。这些文件可以在互联网上,因此限制不是存储输入和输出的空间量,也不是编译时间:它是编写所有代码所需的开发人员数量。如果你有一百万开发人员在你的单个项目上工作了一万亿年,并且每个开发人员可以每3秒向项目中添加一个DependencyProperty,那么你最终会得到大约 1 septillion DependencyProperties。万亿年。

当然所有这些都是相当愚蠢的...唯一的实际约束是每个AppDomain限制65535个DependencyProperty定义。

<强>更新

说实话,即使每个AppDomain 65535个DependencyProperties也非常庞大。每个DP对应于概念上独立的应用程序功能。整个WPF,Blend和VS.NET 2010放在一起包含的DP少于1000个。

使用所有65535个可用DP的应用程序将是几亿行代码,不适合32位地址空间,或者可由任何人开发,但可以由十亿美元的公司开发。

因此,在未来十年内生成的任何应用程序中,DependencyProperties耗尽的危险几乎不存在。例外情况是开发人员通过在代码中动态创建DependencyProperties来滥用它们。

答案 1 :(得分:1)

在任何进程中,依赖关系值的数量可能有非常非常高的限制(此数字可能小于正常的最大数量你可以浮动的属性值),但不是每个项目......