public async Task <int> ReadAsync_Parallel(int totWorkerThreads, BufferedStreamReaderConfig config_r, bool usingMemoryStream)
 {
     if (!usingMemoryStream)
     {
         FileHelper.FlushFileCache(tmpFilename_parallel);
     }
     try
     {
         int res = 0;
         using (StreamChain sc1 = new StreamChain())
         {
             Stream s = sc1.ComposeChain(
                 usingMemoryStream ? ms_parallel :
                 File.Open(tmpFilename_parallel, FileMode.Open, FileAccess.Read, FileShare.None), config_r);
             using (var dmp = new CollectionDeserializerAsync <T>(new FIFOWorkerConfig(totWorkerThreads), opts_standard))
                 await foreach (var i in dmp.DeserializeAsync(s))
                 {
                     res ^= i.Item.DoStuff();
                 }
         }
         return(res);
     }
     finally
     {
         if (usingMemoryStream)
         {
             ms_parallel.Flush();
             ms_parallel.Position = 0;
         }
     }
 }
 public async Task WriteAsync_Parallel(int totWorkerThreads, BufferedStreamWriterConfig sw_cfg, bool usingMemoryStream)
 {
     if (!usingMemoryStream)
     {
         FileHelper.FlushFileCache(tmpFilename_baseline);
     }
     else
     {
         ms_parallel.SetLength(ms_parallel.Length);
         ms_parallel.Position = 0;
     }
     FileHelper.FlushFileCache(tmpFilename_parallel);
     using (StreamChain sc = new StreamChain())
     {
         Stream s = sc.ComposeChain(
             usingMemoryStream ? ms_parallel :
             File.Open(tmpFilename_parallel, FileMode.Create, FileAccess.Write, FileShare.None), sw_cfg);
         using (var smp = new CollectionSerializerAsync <T>(s, new FIFOWorkerConfig(totWorkerThreads), new BatchSizeEstimatorConfig(), opts_standard))
             foreach (var obj in objArr)
             {
                 await smp.SerializeAsync(new Frame <T>(obj));
             }
     }
     if (usingMemoryStream)
     {
         ms_parallel.Flush();
         ms_parallel.Position = 0;
     }
 }
        public async Task <int> ReadAsync_Baseline(BufferedStreamReaderConfig config_r, bool usingMemoryStream)
        {
            if (!usingMemoryStream)
            {
                FileHelper.FlushFileCache(tmpFilename_baseline);
            }
            try
            {
                int res = 0;
                using (StreamChain sc1 = new StreamChain())
                {
                    Stream s = sc1.ComposeChain(usingMemoryStream ? ms_baseline :
                                                File.Open(tmpFilename_baseline, FileMode.Open, FileAccess.Read, FileShare.None), config_r);
                    using (var streamReader = new MessagePackStreamReader(s, true))
                        while (await streamReader.ReadAsync(CancellationToken.None) is ReadOnlySequence <byte> msgpack)
                        {
                            var obj = MessagePackSerializer.Deserialize <Frame <T> >(msgpack, opts_standard, CancellationToken.None).Item;

                            res ^= obj.DoStuff();
                        }
                }
                return(res);
            }
            finally
            {
                if (usingMemoryStream)
                {
                    ms_baseline.Flush();
                    ms_baseline.Position = 0;
                }
            }
        }
 public async Task WriteAsync_Baseline(BufferedStreamWriterConfig sw_cfg, bool usingMemoryStream)
 {
     if (!usingMemoryStream)
     {
         FileHelper.FlushFileCache(tmpFilename_baseline);
     }
     else
     {
         ms_baseline.SetLength(ms_baseline.Length);
         ms_baseline.Position = 0;
     }
     using (StreamChain sc = new StreamChain())
     {
         Stream s = sc.ComposeChain(
             usingMemoryStream ? ms_baseline :
             File.Open(tmpFilename_baseline, FileMode.Create, FileAccess.Write, FileShare.None), sw_cfg);
         for (int ix = 0; ix < objArr.Length; ix++)
         {
             T obj = objArr[ix];
             await MessagePackSerializer.SerializeAsync(s, new Frame <T>(obj), opts_standard);
         }
     }
     if (usingMemoryStream)
     {
         ms_baseline.Flush();
         ms_baseline.Position = 0;
     }
 }
 public void Write_Baseline(BufferedStreamWriterConfig sw_cfg, bool usingMemoryStream)
 {
     if (!usingMemoryStream)
     {
         FileHelper.FlushFileCache(tmpFilename_baseline);
     }
     else
     {
         ms_baseline.SetLength(ms_baseline.Length);
         ms_baseline.Position = 0;
     }
     using (StreamChain sc = new StreamChain())
     {
         Stream s = sc.ComposeChain(
             usingMemoryStream ? ms_baseline :
             File.Open(tmpFilename_baseline, FileMode.Create, FileAccess.Write, FileShare.None), sw_cfg);
         Type t = typeof(T);
         foreach (T obj in objArr)
         {
             model.SerializeWithLengthPrefix(s, obj, t, PrefixStyle.Base128, 1);
         }
     }
     if (usingMemoryStream)
     {
         ms_baseline.Flush();
         ms_baseline.Position = 0;
     }
 }
예제 #6
0
        public async Task WriteAsync_Parallel(int totWorkerThreads, BufferedStreamWriterConfig sw_cfg, bool usingMemoryStream)
        {
            if (!usingMemoryStream)
            {
                FileHelper.FlushFileCache(tmpFilename_baseline);
            }
            else
            {
                ms_parallel.SetLength(ms_parallel.Length);
                ms_parallel.Position = 0;
            }
            FileHelper.FlushFileCache(tmpFilename_parallel);
            var opts = new FrameParallelOptions(totWorkerThreads, opts_standard.WithResolver(FrameResolverPlusStandarResolver.Instance));

            using (StreamChain sc = new StreamChain())
            {
                Stream s = sc.ComposeChain(
                    usingMemoryStream ? ms_parallel :
                    File.Open(tmpFilename_parallel, FileMode.Create, FileAccess.Write, FileShare.None), sw_cfg);
                await MessagePackSerializer.SerializeAsync(s, obj_parallel, opts);
            }
            if (usingMemoryStream)
            {
                ms_parallel.Flush();
                ms_parallel.Position = 0;
            }
        }
예제 #7
0
        public async Task <int> ReadAsync_Parallel(int totWorkerThreads, BufferedStreamReaderConfig config_r, bool usingMemoryStream)
        {
            if (!usingMemoryStream)
            {
                FileHelper.FlushFileCache(tmpFilename_parallel);
            }
            var opts = new FrameParallelOptions(
                totWorkerThreads, opts_standard.WithResolver(FrameResolverPlusStandarResolver.Instance));

            try
            {
                using (StreamChain sc1 = new StreamChain())
                {
                    Stream s = sc1.ComposeChain(
                        usingMemoryStream ? ms_parallel :
                        File.Open(tmpFilename_parallel, FileMode.Open, FileAccess.Read, FileShare.None), config_r);
                    var obj = await MessagePackSerializer.DeserializeAsync <T_Parallel>(s, opts);

                    return(obj.DoStuff());
                }
            }
            finally
            {
                if (usingMemoryStream)
                {
                    ms_parallel.Flush();
                    ms_parallel.Position = 0;
                }
            }
        }
예제 #8
0
        public async Task <int> ReadAsync_Baseline(BufferedStreamReaderConfig config_r, bool usingMemoryStream)
        {
            if (!usingMemoryStream)
            {
                FileHelper.FlushFileCache(tmpFilename_baseline);
            }
            try
            {
                using (StreamChain sc1 = new StreamChain())
                {
                    Stream s = sc1.ComposeChain(
                        usingMemoryStream ? ms_baseline :
                        File.Open(tmpFilename_baseline, FileMode.Open, FileAccess.Read, FileShare.None), config_r);
                    var obj = await MessagePackSerializer.DeserializeAsync <T_Baseline>(s, opts_standard);

                    return(obj.DoStuff());
                }
            }
            finally
            {
                if (usingMemoryStream)
                {
                    ms_baseline.Flush();
                    ms_baseline.Position = 0;
                }
            }
        }
        public int Read_Baseline(BufferedStreamReaderConfig config_r, bool usingMemoryStream)
        {
            if (!usingMemoryStream)
            {
                FileHelper.FlushFileCache(tmpFilename_baseline);
            }
            try
            {
                Type t   = typeof(T);
                int  res = 0;
                using (StreamChain sc1 = new StreamChain())
                {
                    Stream s = sc1.ComposeChain(usingMemoryStream ? ms_baseline :
                                                File.Open(tmpFilename_baseline, FileMode.Open, FileAccess.Read, FileShare.None), config_r);
                    do
                    {
                        object obj = model.DeserializeWithLengthPrefix(s, null, t, PrefixStyle.Base128, 1);

                        if (obj is T objT)
                        {
                            res ^= objT.DoStuff();
                        }
                        else if (obj is null)
                        {
                            break;
                        }
                        else
                        {
                            throw new Exception("unexpected obj type deserialized");
                        }
                    } while (true);
                }
                return(res);
            }
            finally
            {
                if (usingMemoryStream)
                {
                    ms_baseline.Flush();
                    ms_baseline.Position = 0;
                }
            }
        }