It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center




9年前关闭。




我列出了所有有助于在具有许多控件的非常复杂的应用程序中提高性能的方法。如果您想添加自己的,欢迎您!
  • 如果您知道控件的大小,请删除“自动”并输入实际值,因此父级不必解析所有子项来检查他需要的大小
  • 如果元素不需要是交互式的
  • ,则设置参数IsHitTestVisible = False
  • 卡住所有可以使用的对象
  • 使用静态资源代替动态资源
  • 不要使用Ellipse对象,将Ellipse转换为Path
  • 如果可以使用TextBlock,请不要使用TextBox或Label。
  • 如果可能,请使用 Canvas 而不是网格
  • 没有FlowDocument
  • 虚拟化!!虚拟化StackPanel而不是StackPanel
  • 不要使用List,ObservableCollection会更快
  • 使用图形库,它比Shapes库
  • 更快
  • 检查您的绑定(bind)!如果绑定(bind)不起作用,它可能会非常慢
  • 不要使用Visibility.Hidden,请使用Visibility.Collaped,当您可以
  • DependencyProperty比INotifyPropertyChanged
  • 快3倍
  • StreamGeometry快于PathGeometry
  • 处理完事件处理程序后,将其清除!
  • 不要使用“对象不透明度”属性,如果可以的话,请使用其颜色不透明度
  • 检查您的应用程序是否为硬件渲染(Tier-2)
  • 当可以
  • 时减小图像的大小/质量
  • 渲染图像比渲染矢量要快得多!

  • 我使用的工具:
  • WPF检查器
  • 史努比
  • WPFPerf套件
  • Visual Studio探查器
  • .NET的CLR分析器
  • 最佳答案

    这实际上是评论,而不是答案,但是没有足够的赞美空间。

    当ObservableCollection实现iList时,ObservableCollection的速度比List更快,这对我来说似乎很直观。

    我有一个在ListView(虚拟化)上测试的660,000个单词的列表。
    在下面创建了集合类型,并创建了一些按钮来切换后面代码中的绑定(bind)。所有集合都是即时呈现的(虚拟化的力量)。

    变量是创建集合和从集合中需要所需功能的时间。使用SQLdataReader填充集合。 SQLdataReader中存在可变性。每次跑10次,可重复结果为2个有效数字,而我报告的平均值为3个有效数字。列表将ObservableCollection击败约400毫秒。未测量内存,但List显然将使用更少的内存。

    毫秒,可加载660,000个字符串,平均每个字符串约40个字符。

        1510 List
        1780 Dictionary
        1820 HashSet
        1980 ObservableCollection
        8000 SortedDictionary
    

    在一个非常大的集合中,HashSet会比List更好。 HashSet应该胜过Dictionary-这些数字在此有限的非严格测试的变异性之内。

    它归结为功能。 ObservableCollection支持动态插入和删除。如果您需要动态插入和删除,那么到目前为止,这是最佳选择。如果不需要动态插入和删除,那么我的经验是List是更好的选择(通过ListItem List的iNotifyPropertyChanged支持动态修订)。

    列表保留添加项目的顺序。 HashSet不会保留顺序。选择使用哪个集合的因素很多。
    http://geekswithblogs.net/BlackRabbitCoder/archive/2011/06/16/c.net-fundamentals-choosing-the-right-collection-class.aspx

    对单个项目的访问时间发表了评论。我使用List,ObservableCollection和Dictionary访问了项[1],[100000],[200000],[300000],[400000],[500000],[600000]。他们都是12毫秒。访问时间是死气沉沉,可重复的。

    09-30 17:37
    查看更多