public void Test_ReadSharedStrings() { var t = new StringsTable <SharedString> { String1 = "string", String2 = "foo", String3 = "string", }; byte[] destination = new byte[1024]; var serializer = FlatBufferSerializer.Default.Compile <StringsTable <SharedString> >() .WithSettings(new SerializerSettings { SharedStringWriterFactory = () => new SharedStringWriter(100), SharedStringReaderFactory = () => SharedStringReader.Create(100), }); int bytesWritten = serializer.Write(SpanWriter.Instance, destination, t); var table = serializer.Parse(destination); Assert.AreEqual("string", (string)table.String1); Assert.AreEqual("foo", (string)table.String2); Assert.AreEqual("string", (string)table.String3); Assert.IsTrue(object.ReferenceEquals(table.String1.String, table.String3.String)); }
public override void GlobalSetup() { this.regularStringSerializer = FlatBufferSerializer.Default.Compile <VectorTable <string> >(); this.sharedStringSerializer = FlatBufferSerializer.Default.Compile <VectorTable <SharedString> >() .WithSettings(new SerializerSettings { SharedStringReaderFactory = () => SharedStringReader.Create(this.CacheSize), SharedStringWriterFactory = () => new SharedStringWriter(this.CacheSize), }); this.sharedStringThreadSafeSerializer = FlatBufferSerializer.Default.Compile <VectorTable <SharedString> >() .WithSettings(new SerializerSettings { SharedStringReaderFactory = () => SharedStringReader.CreateThreadSafe(this.CacheSize), SharedStringWriterFactory = () => new SharedStringWriter(this.CacheSize), }); Random random = new Random(); List <string> guids = Enumerable.Range(0, this.VectorLength) .Select(i => Guid.NewGuid().ToString()).ToList(); List <string> randomGuids = Enumerable.Range(0, this.VectorLength) .Select(i => guids[random.Next(0, guids.Count)]).ToList(); List <string> guassianGuids = Enumerable.Range(0, this.VectorLength) .Select(i => guids[NextGaussianInt(random, 0, guids.Count - 1)]).ToList(); nonSharedStringVector = new VectorTable <string> { Vector = randomGuids.ToList() }; randomSharedStringVector = new VectorTable <SharedString> { Vector = randomGuids.Select(SharedString.Create).ToList() }; nonRandomSharedStringVector = new VectorTable <SharedString> { Vector = guassianGuids.Select(SharedString.Create).ToList() }; int nonSharedSize = this.Serialize_RandomStringVector_WithRegularString(); int cacheSize = this.Serialize_NonRandomStringVector_WithSharing(); Console.WriteLine($"NonSharedSize = {nonSharedSize}"); Console.WriteLine($"DirectMapSize = {cacheSize}"); }