我正在使用 .NET 4.5 在 C# 中编写应用程序。我的应用程序读取和写入硬件设备使用的二进制文件。该文件正好是 5,000,000 字节,由 100,000 个 50 字节的“块”组成。每个 50 字节的块将包含一个 ASCII 编码的字符串(可能只是一个空字符串)。设备需要文件布局,因此可以通过确定偏移量(索引 * 50 字节,然后读取/写入接下来的 50 字节)来访问任何字符串。
我的 WinForms 应用程序需要能够:
- 从文件中加载所有 100,000 个字符串并在 UI(列表框)中显示它们
- 添加、编辑或删除字符串
- 以正确的格式重写二进制文件
注意事项:
- 二进制文件中的大量数据最初是我不想向用户显示的空字符串,但仍需要在我的数据结构中,以便我可以正确地重写文件。
- 在添加新字符串之前,我需要确保有可用空间来允许它(即,至少有一个 50 字节的空块)。如果没有,那么用户将需要“删除”现有字符串,以便为要添加的新字符串腾出空间。
- 在幕后,添加、修改和删除字符串是相同的操作。添加只是将 50 字节的空数据更改为 50 字节的字符串数据,而删除则相反。
- 除空字符串外,不应存储重复的字符串,因此我需要某种方法来遍历我的数据结构,以确保在添加或编辑字符串以匹配现有字符串之前字符串不存在。
所以我需要一个数据结构来保存文件中的所有数据,我正在努力在字典、列表或数组之间做出决定。鉴于上述警告,我不认为直接将任何数据结构绑定到 UI 是一个可行的解决方案。所以我认为我需要在该数据结构和列表框之间使用大量代码来实现某种伪绑定。如果是这种情况,从功能的角度来看,哪种数据结构(字典、列表、数组等)最有用,并提供最佳折衷:使用这种大小的数据集(100,000 个最多 50 个 ASCII 字符的字符串)的速度每个)?