ItemsControl.ItemsSource MVVM 性能

2023-11-24

我有一个(非虚拟化)ItemsControl,它将其 ItemsSource 绑定到 ViewModel 实例的 ObeservableCollection。现在,一旦加载大量 Model 实例,所有 ViewModel 补充都需要添加到该 ObservableCollection 中。如何添加大量 ViewModel 而不会导致 UI 线程挂起?

我想 UI 线程会挂起,因为每次添加新项目时,ItemsControl 都需要更新自身并一遍又一遍地进行布局等。

  • 我是否应该暂停绑定添加所有 项目然后恢复?如果是这样,怎么办?
  • 我应该覆盖 ObservableCollection 来实现 AddRange 所以只有 1 个 CollectionChanged 添加多个时会触发事件 项目?或者只是替换 整个集合?
  • 或者更好 分别添加每个项目并调用 Dispatcher.Invoke 每个项目 分别地?所以我会解锁 频繁地。

如何处理无法虚拟化的大型动态列表?


您可以创建一个派生类可观察集合这允许您暂时暂停收藏已更改像这样的事件:

public class SuspendableObservableCollection : ObservableCollection
{
    private bool suspended;

    public bool Suspended 
    {
        get
        {
            return this.suspended;
        }
        set
        {
            this.suspended = value;
            OnCollectionChanged(new NotifyCollectionChangedEventArgs(
                NotifyCollectionChangedAction.Reset));
        }
    }

    protected override void OnCollectionChanged(
        NotifyCollectionChangedEventArgs args)
    {
       if (!Suspended)
       {
           base.OnCollectionChanged(args);
       }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ItemsControl.ItemsSource MVVM 性能 的相关文章

  • ListView:在资源字典中定义ItemsPanelTemplate

    我有一个 ListView 其布局看起来像 Windows 资源管理器视图 图标 一些详细信息 绑定到 ViewModel 中某处的列表 我的目标是能够随时在资源管理器视图或经典视图之间切换 我可以定义一个ItemsPanelTemplat
  • CSS3 - 性能最佳实践是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何加速我的 Perl 程序?

    这确实是两个问题 但它们非常相似 为了简单起见 我想我应该把它们放在一起 Firstly 给定一个已建立的 Perl 项目 除了简单的代码优化之外 还有哪些不错的方法可以加速它 Secondly 用Perl从头开始编写程序时 有哪些好的方法
  • 如何针对 IE 进行优化?

    我有一个 JS 密集型应用程序 它在 IE 中运行缓慢 我将花费大约一周的时间来优化 IE 并且我想要一些关于尝试的方向 我发现这个线程引用Drip https ieleak svn sourceforge net svnroot iele
  • WPF DataGrid 选定项

    我有一个 DataGrid 用户可以通过在最后一行输入数据来添加项目 我还有一个按钮可以删除当前选定的项目 但是 当选择最后一行 空 用于添加新项目 时 最后选定的项目将保留在 SelectedItem 中 因此 如果我打开窗口 选择最后一
  • 每个存储桶的最大沙发底座视图数

    假设存储桶中有大量数据 gt 100GB gt 100M 文档 gt 12 种文档类型 并且假设每个视图仅适用于一种文档类型 那么每个存储桶有多少视图就太多了 或者以另一种方式问 在什么时候应该将某些文档类型拆分到单独的存储桶中 以节省处理
  • 由于内容不可压缩,谷歌浏览器中出现了新的复合层

    当 chrome profiler 说 图层是单独合成的 因为它无法被挤压 时 它到底意味着什么 我正在对我的 html 进行更改 并在相对 div 内引入了一个固定位置 div 并给出了will change transform在上面 完
  • zk 与 gwt zk 请求太多

    您好 我正在尝试比较 zk 和 gwt 的性能 在我的比较中 如果框架本身将一些代码转换为js 那么我自己无法编写任何javascript 如get 但我无法自己编写js 在以上述方式编写代码时 几乎所有在浏览器上完成的操作都会将请求发送到
  • 非规范化如何提高数据库性能?

    我听说过很多关于非规范化的内容 它是为了提高某些应用程序的性能而进行的 但我从来没有尝试过做任何相关的事情 所以 我只是好奇 规范化数据库中的哪些地方会使性能变差 或者换句话说 非规范化原则是什么 如果我需要提高性能 如何使用此技术 非规范
  • 如何在 PHP 数组中的另一个已知(通过键或指针)元素之后有效地插入元素?

    给定一个数组 a array abc 123 k1 gt v1 k2 gt v2 78 tt k3 gt v3 当其内部指针指向其元素之一时 如何在当前元素之后插入元素 如何在键已知元素 例如 k1 之后插入元素 表现护理 您可以通过使用拆
  • 我应该如何获取 IEnumerable 的长度? [复制]

    这个问题在这里已经有答案了 我正在编写一些代码 然后去获取 IEnumerable 的长度 当我写的时候myEnumerable Count 令我惊讶的是 它没有编译 看完之后IEnumerable Count 和 Length 之间的区别
  • 当我使用并行代码时,为什么我的计算机没有显示加速?

    所以我意识到这个问题听起来很愚蠢 是的 我使用的是双核 但我尝试了两个不同的库 Grand Central Dispatch 和 OpenMP 并且当使用 clock 来对带有和不带有使平行的话 速度是一样的 根据记录 他们都使用自己的并行
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 从 dask 数据框中的日期时间序列获取年份和星期?

    如果我有一个 Pandas 数据框和一个日期时间类型的列 我可以按如下方式获取年份 df year df date dt year 对于 dask 数据框 这是行不通的 如果我先计算 像这样 df year df date compute
  • 命令绑定到 ContextMenu(在 ListBox 中的 ListBoxItem 上)不起作用[重复]

    这个问题在这里已经有答案了 在 WPF 中 借助 MVVM 光 有一个Class 由一些学生组成 以及Class持有一些Students 右键单击一个学生的名字 然后会显示一个MessageBox 这样就可以了 类详细信息视图 xaml
  • 内存分配/释放瓶颈?

    在典型的实际程序中 内存分配 释放的瓶颈有多大 欢迎来自性能通常很重要的任何类型的程序的答案 malloc free 垃圾收集的正确实现是否足够快 以至于它只是少数极端情况下的瓶颈 或者大多数性能关键型软件会从尝试减少内存分配量或拥有更快的
  • numpy 数组最快的保存和加载选项

    我有一个生成二维的脚本numpy数组与dtype float和形状的顺序 1e3 1e6 现在我正在使用np save and np load对数组执行 IO 操作 然而 这些函数对于每个数组都需要几秒钟的时间 是否有更快的方法来保存和加载
  • 为什么我的 CAOpenGLLayer 更新速度比之前的 NSOpenGLView 慢?

    我有一个在 Mac OS X 上渲染 OpenGL 内容的应用程序 最初它渲染到 NSOpenGLView 然后我将其更改为渲染到 CAOpenGLLayer 子类 当我这样做时 我看到了巨大的性能损失 帧速率减半 鼠标响应能力降低 卡顿
  • MySQL max_allowed_pa​​cket 参数有什么问题?

    我需要增加 max allowed pa cket 参数 以适应一些理论上非常大的项目 如果我将此参数设置为 10M 那么与设置为 1M 或 4M 相比 我要支付什么价格 如果有的话 感谢您的任何意见 托马斯 我找到了这个解释 http w
  • 为什么 istream/ostream 慢

    于 50 40http channel9 msdn com Events GoingNative 2013 Writing Quick Code in Cpp Quickly http channel9 msdn com Events Go

随机推荐

  • 自定义按键绑定 Xcode 4?

    不久前我问了一个问题Xcode 中的自定义键绑定 我最终重新创建了一些TextMate 的按键命令在 Xcode 中 刚刚更新到 Xcode 4 PBKeyBinding 文件似乎不再有任何作用 自定义键绑定 特别是 Xcode 4 的新热
  • Windows Server 2012 中的 AWS EFS [已关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有人曾经让 Windows Server 使用 Windows NFS 4 1 客户端连接到 AWS EFS 卷吗 我知道它不受支持 但想知道是否有人做过 或通过其他客户端或实用程序
  • 从另一个类调用类方法

    有没有办法从另一个类调用一个类的方法 我正在寻找类似 PHP 的东西call user func array 这是我想要发生的事情 class A def method1 arg1 arg2 class B A method1 1 2 更新
  • 解释 Visual Studio 2010 及更高版本、WinForms 和 WPF 中的严重错误

    尝试将以下代码放入其中LoadWinForms 的事件处理程序或Loaded对于 WPF Dim doc As New XmlDocument Dim nsmgr As New XmlNamespaceManager Nothing thi
  • jquery tmpl 格式化日期?

    我正在使用 jquery tmpl 在表中显示一堆结果 其中之一是我在模板中使用它输出的日期 td class textAlignRight EffectiveDate td 但它的格式如 Date 1245398693390 我怎样才能改
  • 在 r 中读取大文本文件

    我想读取一个包含 110 000 000 行和 8 列的大型视频文件 这些列由 2 个整数列和 6 个逻辑列组成 分隔符 在文件中使用 我尝试使用read big matrix这花了很长时间 我也尝试过dumpDf并且内存不足 我试过ff我
  • Safari 对子像素计算进行舍入

    我有一个连续占用 829px 的容器 并且具有相同大小的背景图像 我在该容器中有一个 div 它根据 829px 容器计算其宽度 在 safari 上 div 宽度约为 173 8px 但由于 safari webkit 向下舍入 其宽度被
  • 如何使用 node.js 响应传入的 Twilio 呼叫和 SMS 消息?

    在我的应用程序中 我使用 twilio node js 模块来接收短信 发送短信 接听电话和拨打电话 我弄清楚了如何发送短信和拨打电话 但我不知道如何回复来电和短信 我如何使用节点来响应这些 当 Twilio 收到对您的电话号码的呼叫时 它
  • 如何将 Jackson mixin 添加到阅读器而不是对象映射器?

    我有一个对象 我想在程序的一部分中使用属性进行序列化 但在不同的部分中没有属性 我还有一个经过广泛定制的 ObjectMapper 用于两种序列化 我的第一个倾向是使用 Mixin 来调整是否显示属性 但似乎您只能将它们放在 ObjectM
  • 运行gradle任务时如何在命令行中传递多个参数?

    我有一个由 gradle 任务运行的 java 和 groovy 类 我已设法使其工作 但我不喜欢在命令行中传递参数的方式 这是我目前通过命令行执行此操作的方法 gradle runTask Pmode doStuff username p
  • Java FileLock 是 POSIX Advisory (fcntl) 锁吗

    我有一个使用 POSIX 咨询锁锁定文件的 C 程序 也就是说 它使用POSIX fcntl系统调用用于锁定操作 我希望 Java 程序能够与 C 程序进行互操作 因此我希望我的 Java 程序也使用 POSIX 咨询锁 Java 中的文件
  • 使用 jQuery .on() 绑定到准备就绪并同时调整大小

    这适用于在就绪和调整大小时运行相同的代码 document ready function window resize function Stuff in here happens on ready and resize resize Tri
  • 正在使用“out”不好的做法

    我刚刚添加了一个outbool 参数到我编写的方法中 以便在我的 UI 中收到警告 我使用了 out 而不是让方法本身返回 false true 因为这意味着做一点事失败 成功 我的想法是warnUser将指示警告实际上是什么 而无需查看该
  • 如何将脚本和 CSS 挂接到 中?

    我正在制作的模块的问题是它会生成一个 javascript 片段 因此我无法使用操作将其挂接到 HTML 部分 因为该操作要求我有一个 JS 文件 如果我是 请纠正我 错误的 我可以通过哪些方法将 JavaScript 片段放入标签中 我正
  • Java + MySQL 完整性违规处理

    我使用 JDBC mysql 数据库 编写 Java 程序 当我违反 mysql 完整性时 例如 我尝试插入相同的主键值 我发现SQL 异常 我应该以永远不会发生的方式编写它 例如 首先布尔函数检查主键值是否不在数据库中 然后调用插入 或者
  • 是否可以使用 document.querySelector() 获取多个 ID?

    是否可以使用 document querySelector 查找多个 ID 例如 div1 div2 div3 如果没有那么有替代解决方案吗 是的 你可以这样做 首先 为了检索multiple元素 你必须使用querySelectorAll
  • 如何用PHP解析XML的Media:Content?

    我在以下位置找到了有关如何完成大部分工作的精彩教程 https www developphp com video PHP simpleXML Tutorial Learn to Parse XML Files and RSS Feeds 但
  • 如何使我的 CSS 代码与所有浏览器兼容? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 p margin 0 padding 0 p error color FF0000 te
  • SVG 属性优先于 CSS&style?

    我有带有指定笔画属性的 SVG 线
  • ItemsControl.ItemsSource MVVM 性能

    我有一个 非虚拟化 ItemsControl 它将其 ItemsSource 绑定到 ViewModel 实例的 ObeservableCollection 现在 一旦加载大量 Model 实例 所有 ViewModel 补充都需要添加到该