gpt4 book ai didi

c# - .NET DataGridView 控件为我占用了大量内存

转载 作者:行者123 更新时间:2023-11-30 12:53:27 25 4
gpt4 key购买 nike

我目前在我的应用程序中使用 DataGridView 控件,但遇到了一个奇怪的内存问题。我根本没有使用 DataBinding,只是手动填充。我放在那里的数据一点也不多。我们最多谈论的是 20 行 x 20 列的数据。

该控件的工作流程是我有一个带有不同“数据集”的组合框,当您选择它们​​时我会加载这些数据集。因此,一个常见的使用场景是在 comboBox 中循环遍历数据集并查看它们在 dataGrid 中呈现。我所看到的是,当人们循环浏览数据集时,应用程序内存使用量立即从 100MB 跃升至 1100MB,然后在 GC 启动时回落。但是如果您快速循环浏览数据集(即比 GC 启动更快) in),你将耗尽内存,应用程序将死掉。

调试后,我发现内存疯狂跳动的主要原因是我在该数据网格中有一些图像类型的列。我用它们来显示一个 16x16 图标,指示该行的状态。这些图标存储在一个 ImageList 中,我只是在填充数据网格的行时将它们设置为该单元格的值。如果我取出图像并用简单的文本替换它们,我绝对看不到任何内存峰值。

那么这里的交易是什么?为什么图像,很小的 16x16,会导致控件在我这样的内存上发疯?

更多信息:

我在切换数据集时的逻辑是:

  • 清除所有网格行:dataGrid.Rows.Clear();
  • 清除所有列:dataGrid.Columns.Clear();
  • 将列添加到 dataGrid 控件:(大多数类型为字符串,以及一些 DataGridViewImageColumn)
  • 使用 dataGrid.Rows.Add(object[] data) 逐行添加我拥有的数据; (数据包括我需要用作图标的图像)。

最佳答案

DataGridView 控件旨在与 DataBinding 一起使用。如果您根本不使用 DataBinding,我建议您使用 ListView 控件。

ListView 针对显示图像进行了优化。此外,与 DataGridView 相比,它在内存中的实例化更轻。此外,ListView 控件可让您更改 View :

  1. ListView.View = View.Details;
  2. ListView.View = View.LargeIcons;
  3. ListView.View = View.List;
  4. ListView.View = View.SmallIcons;
  5. ListView.View = View.Tile。

这些是您在 Windows 资源管理器中可能会遇到的 View 。只需要自己定义一个 LargeIcons ImageList 或 SmallIcons ImageList,或两者之一,具体取决于您允许用户查看的 View 。

您也可以像显示 DataGridView 一样显示 GridLines,只是为了提供相同的方面。

关于c# - .NET DataGridView 控件为我占用了大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2360556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com