c# - 字典与列表与数组的速度和功能

标签 c# .net list dictionary listbox

我正在使用 .NET 4.5 在 C# 中编写应用程序。我的应用程序读取和写入硬件设备使用的二进制文件。该文件正好是 5,000,000 字节,由 100,000 个 50 字节的“ block ”组成。每个 50 字节的 block 将包含一个 ASCII 编码的字符串(可能只是一个空字符串)。设备需要文件布局,以便只需确定偏移量(索引 * 50 字节,然后读取/写入下一个 50 字节)即可访问任何字符串。

我的 WinForms 应用程序需要能够:

  • 从文件中加载所有 100,000 个字符串并将它们显示在 UI(列表框)中
  • 添加、编辑或删除字符串
  • 以正确的格式重写二进制文件

注意事项:

  1. 二进制文件中的大量数据最初是我不想向用户显示的空字符串,但仍需要在我的数据结构中,以便我可以正确地重写文件。
  2. 在添加新字符串之前,我需要确保有可用空间允许它(即,至少有一个 50 字节的空 block )。如果没有,则用户将需要“删除”现有字符串以为要添加的新字符串腾出空间。
  3. 添加、修改和删除字符串在幕后是相同的操作。添加只是将 50 个字节的空数据更改为 50 个字节的字符串数据,而删除则相反。
  4. 除了空字符串外,不应存储重复的字符串,因此我需要一些方法来遍历我的数据结构,以确保在添加字符串或编辑字符串以匹配现有字符串之前该字符串不存在.

所以我需要一个数据结构来保存文件中的所有数据,我正在努力在字典、列表或数组之间做出选择。考虑到上述注意事项,我认为将任何数据结构直接绑定(bind)到 UI 都不是可行的解决方案。所以我认为我需要在该数据结构和列表框之间添加大量代码来实现某种伪绑定(bind)。如果是这样的话,从功能的角度来看,哪种数据结构(字典、列表、数组等)最有用,并且提供最好的折衷方案:这种大小的数据集(100,000 个字符串,最多 50 个 ASCII 字符)的速度每个)?

最佳答案

如果性能至关重要,最好的解决方法是对其进行测试。编写一个快速而肮脏的应用程序,以所有三种方式完成关键的事情,然后将其包装在一个循环中,循环完成 10,000 次,看看哪个更快。

关于c# - 字典与列表与数组的速度和功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13829665/

相关文章:

c# - 'dotnet publish' 命令行跳过部署到 Azure Functions

c# - 自定义异常类以警告错误并记录

c# - 在 C# 中使用 'ref' 关键字

c++ - 如何正确使用remove_if?

c# - C#.NET客户端和C服务器之间的套接字编程

c# - 从 C# 代码以编程方式启动/停止 tomcat webapps

.net - 无法从 C# .Net Core 应用程序连接并获取 Sharepoint 数据

list - 用其他元素替换某个元素的每次出现

python - 尝试通过计算列表列表中的出现次数来添加到字典值中(Python)

c# - 将日期时间字符串与阿拉伯字符串连接起来