最快的.Net和SQL数据类型

最快的.Net和SQL数据类型,.net,sql,types,robotics,.net,Sql,Types,Robotics,我希望这个问题不是太“正确”,我会坦率地说,与stackflow上的许多人相比,我是个新手 我想比较一个AI项目中图像、音频和文本的对象表示。我想将所有三个输入转换为一个数据类型,并使用一个中心比较算法来确定静态可能的匹配 进行这种比较时,“最快”的本机.Net和SQL数据类型是什么?在.Net中,什么数据类型需要CLR中最少的转换?对于SQL,哪种类型的“积垢”最快 我认为字节代表.Net,整数代表SQL,但整数是一个一维的概念。你认为图像和音频应该在文件系统中处理而不是在SQL中处理吗…我猜

我希望这个问题不是太“正确”,我会坦率地说,与stackflow上的许多人相比,我是个新手

我想比较一个AI项目中图像、音频和文本的对象表示。我想将所有三个输入转换为一个数据类型,并使用一个中心比较算法来确定静态可能的匹配

进行这种比较时,“最快”的本机.Net和SQL数据类型是什么?在.Net中,什么数据类型需要CLR中最少的转换?对于SQL,哪种类型的“积垢”最快

我认为字节代表.Net,整数代表SQL,但整数是一个一维的概念。你认为图像和音频应该在文件系统中处理而不是在SQL中处理吗…我猜是这样的


FWIW我正在用我在TrossenRobotics.com买的零件制造一个机器人

就我个人而言,你最好使用字节数组。您可以轻松地将文件读入缓冲区…并从缓冲区读入字节数组,在字节数组中进行比较。

就个人而言,如果您需要在大型二进制对象之间进行频繁比较,我会对对象进行散列并比较散列

如果散列不匹配,那么可以确保对象不匹配(这应该是大多数情况)

如果散列确实匹配,那么您可以启动一个更长的例程来比较实际对象


如果您经常比较这些对象,仅此方法就可以大大提高性能。

据我回忆,就纯粹的性能而言,Int32类型是.NET中速度更快的数据类型之一。但是,不能说它是否最适合您的应用程序。

数据类型的速度有点难以衡量。如果您使用的是32位操作系统或64位操作系统,则会产生很大的差异。为什么?因为它决定了处理这些数据的速度。 通常,在32位系统上,32位内的所有数据类型(int16、int32、char、byte、指针)都将以相同的速度处理。如果需要处理大量数据,最好将其划分为四个字节的块,供CPU处理

然而,当您将数据写入磁盘时,数据速度往往取决于更多因素。如果您的磁盘设备位于某个USB端口上,则所有数据都会被序列化,因此数据会一个字节接一个字节。在这种情况下,大小无关紧要,尽管最小的数据块会留下最小的间隙。(在诸如Pascal之类的语言中,您可以对此类数据使用压缩记录来优化流式处理性能,同时让记录中的字段以4字节的倍数对齐以提高CPU性能。) 普通磁盘将数据存储在更大的块中。为了提高读/写速度,您希望使数据结构尽可能紧凑。但对于处理性能而言,让它们在4字节边界上对齐更有效

这让我想起我曾经和某人讨论过在NTFS磁盘上使用压缩。我设法证明压缩NTFS分区实际上可以提高计算机的性能,因为它必须读取更少的数据块,即使这意味着它必须进行更多的处理来解压缩相同的数据块


要提高性能,您只需找到最薄弱(最慢)的环节并从那里开始。优化后,将出现另一个薄弱环节…

在将任何内容拉入.NET之前,您应该使用LEN函数检查SQL Server中数据的长度。如果长度不同,您已经知道这两个对象是不同的。这样可以避免将大量不必要的数据从SQL Server下载到客户端应用程序

我还建议使用校验和函数()存储散列代码(在二进制数据的单独列中)。只有在使用SQLServer2005及更高版本并且将数据存储为varbinary(MAX)时,这才有效。同样,如果散列码不同,则二进制数据肯定不同

如果您使用的是SQL Server 2000,则必须使用“映像”数据类型


image或varbinary(MAX)都可以很好地映射到客户机上的byte[]对象,但是如果您使用的是SQL Server 2008,则可以选择将数据存储为FILESTREAM数据类型()。

这一点很好。我希望文本中出现相同的匹配,但很少(如果有的话)出现音频和视频。我认为哈希运算的成本很高,但我会处理更少的文本,我会考虑添加它。相反,我更喜欢使用int数组-x86使用32位字,因此比较两个字节至少需要比较两个32位整数的时间。我说“至少”是因为CPU仍然需要进行填充,这也需要一些时间。因此,基本上,通过使用int数组,操作速度至少会提高四倍。