使用 DataGrid 或 ListView 哪个更好地显示大量数据?

2024-02-24

我想在表中显示 >50000 行。哪个是最好使用的控件:DataGrid 还是 ListView(在详细信息视图中)?这些控件中哪一个具有更好的性能?


正如汉斯在对原始问题的评论中所说,它们都将具有糟糕的性能,只有用户肯定会因为同时显示如此多的数据行而感到不满。

但是,如果这在您的应用程序中是不可避免的(并且您提供了very良好的搜索功能),那么你应该强烈考虑使用虚拟模式选项,无论您决定使用哪个控件。这意味着您必须提供自己的数据管理操作,而不是依赖控件来为您执行此操作。优点是事情要快得多。作为文档 http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.virtualmode.aspx says:

虚拟模式设计用于非常大的数据存储。当。。。的时候VirtualMode属性为真,你创建一个DataGridView具有一定数量的行和列,然后处理CellValueNeeded event http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellvalueneeded.aspx填充细胞。虚拟模式需要实现底层数据缓存,以根据用户的操作处理 DataGridView 单元格的填充、编辑和删除。有关实现虚拟模式的更多信息,请参阅如何:在 Windows 窗体 DataGridView 控件中实现虚拟模式 http://msdn.microsoft.com/en-us/library/2b177d6d.aspx.

或者,对于ListView control http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.virtualmode.aspx:

设置VirtualMode属性为 true 则将ListView进入虚拟模式。在虚拟模式下,正常Items http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.items.aspx集合未使用。反而,ListViewItem http://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.aspx对象是根据 ListView 的需要动态创建的。

虚拟模式在许多情况下都很有用。如果一个ListView对象必须从内存中已有的非常大的集合中填充,从而创建一个ListViewItem每个条目的对象可能会造成浪费。在虚拟模式下,仅创建所需的项目。在其他情况下,的值ListViewItem对象可能需要频繁地重新计算,并且对整个集合执行此操作会产生不可接受的性能。在虚拟模式下,仅计算所需的项目。

为了使用虚拟模式,您必须处理RetrieveVirtualItem event http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.retrievevirtualitem.aspx,每次都会引发ListView需要一个项目。该事件处理程序应该创建ListViewItem属于指定索引的对象。除此之外VirtualListSize财产 http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.virtuallistsize.aspx必须设置为虚拟列表的大小。

处理SearchForVirtualItem event http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.searchforvirtualitem.aspx启用虚拟模式搜索。如果不处理该事件,FindItemWithText http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.finditemwithtext.aspx and FindNearestItem http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.findnearestitem.aspx方法将返回 null。

您可以处理CacheVirtualItems event http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.cachevirtualitems.aspx为了维护缓存ListViewItem对象。如果计算或查找创建ListViewItem对象是昂贵的,维护缓存可以提高性能。

If the View财产 http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.view.aspx设置为 Tile 时,该值会自动更改为 LargeIconVirtualMode设置为 true。

在虚拟模式下,Items http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.items.aspx收集被禁用。尝试访问它会导致InvalidOperationException http://msdn.microsoft.com/en-us/library/system.invalidoperationexception.aspx。同样的情况也发生在CheckedItems http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.checkeditems.aspx集合和SelectedItems http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.selecteditems.aspx收藏。如果您想检索选定或选中的项目,请使用SelectedIndices http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.selectedindices.aspx and CheckedIndices http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.checkedindices.aspx而是收藏。

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

使用 DataGrid 或 ListView 哪个更好地显示大量数据? 的相关文章

  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 错误:A 类使用了正在定义的 B 类

    我有一个 C 项目 已使用 C CLI 成功地用 NET 类包装了该项目 我正在定义包装类 h file 我目前正在得到Error C2460 Mixer uses Track which is being defined 正如您在下面的代
  • 长时间运行的 php/fastcgi 脚本在 IIS 7.5 上挂起

    我有一个在 IIS 7 5 上运行的 php 应用程序 以 fastcgi 运行的 php 5 4 该应用程序工作绝对正常 除了长时间运行的 php 脚本似乎挂起 没有 500 错误 它们似乎永远不会完成并将结果返回给浏览器 我在下面编写了
  • 调整海龟屏幕大小和保存时出现问题

    这样我就可以保存一张大图并在图像可视化器中查看其完整尺寸 我将海龟窗口的大小调整为大于显示器的大小 但保存的图像没有被调整大小 因此绘图被截断 from turtle import Screen Turtle import random s
  • 命令/别名可以是变量吗?

    我需要时不时地查看日志文件的特定行 head 10 log txt tail 1 to view line 10 of log txt 然后我写了一个函数v in my bashrc让生活更轻松 v 10 好吧 也许我在这里有点吹毛求疵 我
  • .net core docker 正在通过 VS2019 工作,但映像构建出现错误并且无法工作

    Docker commandName Docker launchBrowser true launchUrl Scheme ServiceHost ServicePort api values httpPort 52706 useSSL t
  • 如何在 Android 中使用 WCF .SVC

    我红色了很多文档 但我无法使用这个 svc 文件 我对 ASMX 文件没有任何问题 只有 SVC 我无法消费 真是非常非常非常压力 我无法修改 WCF 部分 我发布 WSDL 文件并尝试使用它 WSDL
  • 如何更新 TList 中的数据?

    我有这个记录 结构 type THexData record Address Cardinal DataLen Cardinal Data string end 我已经宣布了这个清单 HexDataList TList
  • 运行 python setup.py install 时强制编译器

    有没有办法在运行时显式强制编译器构建 Cython 扩展python setup py install Where setup py的形式为 import os path import numpy as np from setuptools
  • Django QuerySet 与原始 SQL 性能注意事项

    我正在学习 Django 及其 ORM 数据访问方法 有一些我很好奇的东西 在一个特定端点中 我进行了多次数据库调用 对 Postgres 下面是其中一个示例 projects Project objects filter Q first
  • C#/ASP.NET MVC3,从 DateTime.UtcNow 转换为客户端时区。如何获取时区信息?

    我通过在插入新记录时调用 DateTime UtcNow 将日期存储为 UTC 我想将该日期转换为访问者的时区 TimeZoneInfo 上有一个方法可以做到这一点 public static DateTime ConvertTimeFro
  • 使用 Underscore.JS 进行深度挑选

    我正在尝试使用 underscoreJs 来操作 JavaScript 对象 但遇到问题 这是我的例子 var data label SomeName parent id parentId resources name ID1NAME ca
  • 使用 R 登录 .NET 站点

    我正在尝试使用我的凭据登录 NET 站点 但无法使其正常工作 我的代码的灵感来自下面的线程 如何使用 R 登录并从 aspx 网页下载文件 https stackoverflow com questions 15853204 how to
  • 如何在React.js中从本地Json文件获取图像Url

    我希望能够通过从 JSON 文件获取 URL 来显示本地文件夹中的图像 到目前为止我已经尝试过 src require blog imUrl src 博客 imgUrl src 需要 blog imgUrl 当我使用 require 时遇到
  • mkdir 仍然是原子的吗? (安装在 SAN 上的 Windows 7 文件系统)

    我们有一些通过基于目录的队列进行通信的旧应用程序 队列中的每个项目都是一个文件 并且有一个头文件维护队列中项目的文件名的有序列表 当然 这个旧代码需要在推送和弹出项目时锁定队列 它所做的是创建一个锁定子目录 假设 mkdir 是一个原子操作
  • 更改 Git 存储库目录位置。

    对于 Windows 版的 Git Github 如果我有一个包含此目录的存储库 C dir1 dir2 我需要做什么才能将存储库文件移动到C dir1 显然我可以物理地复制和粘贴文件 但是我需要在 Git 端做什么呢 我在 GitHub
  • 从 Tensorflow 中的张量中随机选择元素

    给定一个张量 其形状为Nx2 怎么可能选择k该张量中的元素类似于np random choice 同等概率 另一点需要注意的是 N在执行过程中动态变化 意思是说我正在处理一个动态大小的张量 你可以只包np random choice as
  • LINQ to SQL Where 子句可选条件

    我正在使用 LINQ to SQL 查询 但遇到了一个问题 我有 4 个可选字段来过滤数据结果 我所说的可选是指可以选择是否输入值 具体来说 一些文本框可能有一个值或有一个空字符串 以及一些下拉列表可能已经选择了一个值 也可能没有选择 例如
  • CSS 问题 - ASP.NET 日历选择器

    EDIT通过以下答案之一 我能够纠正表格内渲染的此问题 我仍然在我的列表视图中看到这个问题 我已经为 ListView 尝试过这个 CSS 但它没有解决问题 FIX FOR CALENDAR IN TABLE DateTime Edit w
  • :确认 Rails 不工作

    我刚刚开始在 ruby on Rails 中进行编码 并且一直在遵循一个指南 该指南使用的 Rails 版本比我正在使用的版本更过时 我用的是3 2 12 这是我的代码 据我了解 这些符号被传递到 Rails 然后转换为 html 或 ja
  • 使用 DataGrid 或 ListView 哪个更好地显示大量数据?

    我想在表中显示 gt 50000 行 哪个是最好使用的控件 DataGrid 还是 ListView 在详细信息视图中 这些控件中哪一个具有更好的性能 正如汉斯在对原始问题的评论中所说 它们都将具有糟糕的性能 只有用户肯定会因为同时显示如此