Ho un grande oggetto grafico in .NET (F # come succede) che ho bisogno di persistere su disco e quindi caricherò di nuovo periodicamente per l'uso in un calcolo.
L'esecuzione della deserializzazione è più importante (verrà eseguita più volte) rispetto alla seriliatura (verrà eseguita una sola volta) che dovrebbe influire sulla risposta.
Attualmente sto usando FsPickler
e sto usando il loro formato binario. Questo è molto conveniente / facile da usare, ma sto cercando di capire quanto prestazioni otterrei personalizzando un serializzatore / deserializzatore ...
Una delle strade che sto considerando è quella di persistere e caricare da un piccolo database relazionale (ho in mente sqlite). Devo aspettarmi che sia molto più veloce?
Per richiesta di seguito, ho fornito una versione leggermente semplificata del grafico dell'oggetto su cui sto lavorando di seguito:
codice
type Value =
| Float of float
| String of string
| Bool of bool
[<Struct>]
type Address (i:int, j:int, k:int) =
member this.I = i
member this.J = j
member this.K = k
type Data = {
Target:Address
mutable SpecialIndex:int
mutable Parameters1 : Value []
mutable Parameters2 : Address []
Check1 : bool
Check2:bool
Parent: Address option
}
type Persisted =
{
Inputs : Address []
Outputs : Address []
Aliases : Dictionary<string, Address>
Mapping : Dictionary<string, int>
Masters: Dictionary<Address, Value[]>
BigCollection : Data [] }
-
L'oggetto che viene mantenuto è un'istanza di
Persisted
. -
È probabile che le dimensioni grandi si verifichino a causa del fatto che
Persisted.BigCollection
si trova nell'ordine di 10 o più elementi dell'array.