C# Int vs Byte performance & SQL Int vs Binary performance

标签 c# sql

在 C# Windows 应用程序中,我处理 HEX 字符串。单个 HEX 字符串将包含 5-30 个 HEX 部分。

07 82 51 2A F1 C9 63 69 17 C1 1B BA C7 7A 18 20 20 8A 95 7A 54 5A E0 2E D4 3D 29

目前,我使用 Convert.ToInt32(string, 16) 将此字符串解析为 N 个整数。然后我将这些 int 值添加到数据库中。当我从数据库中提取这些值时,我将它们提取为 Ints,然后将它们转换回 HEX 字符串。

将这些字符串转换为字节,然后将它们作为二进制数据类型添加到数据库中是否会提高性能?

编辑:

5-30 HEX 部分对应于特定的表,其中所有部分组成 1 个记录,每个部分都有单独的部分。例如,如果我有 5 个十六进制值,它们对应于 1 条记录的 5 个独立列。

编辑:

澄清(抱歉):

我有 9 张 table 。每个表都有一定数量的列。

表 1:30

表 2:18

表 3:18

表 4:18

表 5:18

表 6:13

表 7:27

表 8:5

表 9:11

每个表中的每一列都对应一个特定的十六进制值。

例如,我的应用程序将接收一个包含 13 个十六进制组件的单一字符串格式的“负载”:07 82 51 2A F1 C9 63 69 17 C1 1B BA C7。目前我接受这个字符串并解析各个 HEX 组件并将它们转换为 int,将它们存储在一个 int 数组中。然后我获取这些 int 值并将它们存储在数据库中相应的表和列中。当我读取这些值时,我将它们作为整数获取,然后将它们转换为十六进制字符串。

我想知道的是我是否应该将 HEX 字符串转换为字节数组并将字节存储为 SQL 二进制变量类型。

最佳答案

就性能而言,您当然应该测试这两种方式。

但是,就可读性而言,如果这只是任意数据,我当然建议使用字节数组。如果它实际上 意味着表示一个整数序列,那很好 - 但为什么要使用 4 字节整数的集合来表示任意字节数组?它不适合其他任何东西:

  • 如果您的输入数据不是 4 字节的倍数,则必须考虑填充
  • 使用流读写数据是一件很痛苦的事情
  • 不清楚您如何将整数存储在数据库中,但我期望如果您只是想存储整个东西,blob 会更高效

我建议以更自然的方式编写代码,使您的数据接近它真正试图表示的事物类型,然后衡量性能。如果它足够好,那么你就不需要再看下去了。如果不是,您将有一个很好的调整基础。

关于C# Int vs Byte performance & SQL Int vs Binary performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9469967/

相关文章:

javascript - 倾斜文本时重复 hAxis 标签 - Google 图表

sql - 表值函数 - 输出中忽略排序依据

c# - WPF => 将 ContextMenu 与 CollectionViewSource 绑定(bind)

c# - ASP.Net MVC 3 和 System.Data.Entity?

java - 创建事件以删除表中的记录

sql - 转换为表格后如何获取 VARRAY 项目的索引

sql - 在oracle中后台处理文件时如何更改日期格式

mysql - 仅包含在第二个表中设置为 true 的行的 select 语句

c# - UTF-8 对字节顺序敏感吗?

c# - 在列表项之间添加空间,或使项目更容易在 ASP.NET 下拉列表中的触摸屏上选择