我可以在 F# 中对数组执行相当于 C 转换的操作吗?

can I do the equivalent of a C cast on an array in F#?

我有大量这种类型的数组:

type TradeData =    
    {
        Timestamp:          DateTime
        Instrument:         Instrument
        Price:              decimal
        Quantity:           decimal
        Direction:          Direction
    }

我们说的是在调试期间每次加载几千兆字节。 使用 FSPickler 将数据以二进制形式存储在磁盘上,这比 Json 快得多,但仍然需要很长时间才能加载。 我通过将文件分成 1 小时的块并并行加载它们来加快速度,但是在每个调试会话开始时我们仍然需要 15-20 秒。

我想知道的是我是否可以将数据放在一个数组中,将数组写成二进制 blob。 然后我会加载 blob 并执行类似的操作:

myData = (TradeData *) pBinaryBlob

我不确定这在 dotnet 下是否可行,或者每个对象是否真的需要独立初始化。

如果您使用 struct 而不是对象,这可能可以完成。如果您已经将文件序列化为对象,您可能需要使用结构将文件 re-serialise 一次 bit-align 或使用必要的字节对齐 carefully annotate your struct

如果您将 FileStream 读入字节缓冲区,我会考虑使用 nativeptr<'T> or (ReadOnly)Span<'T> and MemoryMarshal.Cast 来执行 unsafe 转换。