Int比较比Haskell中的ByteString比较更快?

时间:2013-01-02 03:51:43

标签: performance haskell comparison bytestring

我正在实现模式挖掘算法,通常输入的数据是具有以下格式的文件

item1 item2 item3
item0 item3 item10
....
item30 item40 item30

通常itemxString。为了提高效率,我曾使用ByteString读取文件,该文件比默认String更快。由于模式挖掘算法的重要任务是项集之间的比较。我想知道如果我更改输入文件格式以便在Int之间进行比较而不是在ByteString之间进行比较,我的程序会更快或更慢。这是新颖的格式:

1 2 3
0 3 10
....
30 40 30

谢谢!

1 个答案:

答案 0 :(得分:3)

如果你仅限于询问由eqInt# primop给出的Int上的相等函数是否比bytestrings中的相等函数更快 -

primop   IntEqOp  "==#"   Compare
   Int# -> Int# -> Bool
   with commutable = True

VS

eq :: ByteString -> ByteString -> Bool
eq a@(PS fp off len) b@(PS fp' off' len')
  | len /= len'              = False    -- short cut on length
  | fp == fp' && off == off' = True     -- short cut for the same string
  | otherwise                = compareBytes a b == EQ
{-# INLINE eq #-}

然后Int案例会更快。毫无疑问。

但是,如果必须先将您的bytestring输入(或String输入)解析为Int标记,则可能会丢失。

真正了解这里的唯一方法就是衡量。