C#Int vs Byte性能& SQL Int与二进制性能

时间:2012-02-27 18:11:02

标签: 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个HEX值,它们对应于1个记录的5个单独列。

编辑:

澄清(抱歉):

我有9张桌子。每个表都有一组列数。

表1:30

表2:18

表3:18

表4:18

表5:18

表6:13

表7:27

表8:5

表9:11

每个表中的每个列都对应一个特定的HEX值。

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

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

3 个答案:

答案 0 :(得分:4)

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

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

  • 如果输入数据不是4字节的倍数,则必须考虑填充
  • 使用流读取和写入数据方面的工作很痛苦
  • 目前尚不清楚你是如何将整数存储在数据库中的,但如果你只想存储整件事情,那么期望 blob更有效率

我建议用更简单的自然方式编写代码,保持数据接近它真正想要代表的东西,然后测量性能。如果它足够好,那么你不需要再看了。如果不是,那么你将有一个很好的调整基础。

答案 1 :(得分:1)

是的,到目前为止。插入很多行远比插入几行更大。

答案 2 :(得分:1)

数据模型通常不仅取决于您想要的方式,还取决于您想要查找和读取数据的方式。

一些注意事项:

  • 如果您需要找到特定的“HEX部分”,即使不在“HEX字符串”的开头,那么每个“HEX部分”都需要在一个单独的行,以便数据库索引可以获取它。
  • 根据您的DBMS / API,通过BLOB或字节数组搜索可能并不容易。这对于加载非前缀“HEX部件”或在“HEX字符串”中间执行修改可能很重要。
  • 如果“HEX字符串”需要是PRIMARY,UNIQUE或FOREIGN KEY,或者需要通过前缀进行搜索,那么您通常需要一个实际可索引的数据库类型(BLOB通常不是,但大多数DBMS具有 )的较小字节数组的替代类型。

总而言之,字节数组可能就是您所需要的,但请注意上述注意事项。