Esempio n. 1
0
        public unsafe void Test()
        {
            var pool = new DynamicMemoryPool();

            uint blocksize = 234401;
            var  pblock    = (byte *)pool.Alloc(blocksize);
            var  stream    = new MemoryViewStream();

            stream.Attach(pblock, blocksize);


            var data = new byte[blocksize];

            for (var i = 0; i < data.Length; i++)
            {
                data[i] = (byte)i;
            }

            using (var writer = new BinaryWriter(stream, Encoding.UTF8, true))
            {
                writer.Write(data, 0, data.Length);
            }

            if (stream.Position != stream.Length)
            {
                throw new Exception("Invalid position: " + stream.Position);
            }

            stream.Seek(0, SeekOrigin.Begin);

            if (stream.Position != 0)
            {
                throw new Exception("Invalid position: " + stream.Position);
            }

            using (var reader = new BinaryReader(stream, Encoding.UTF8, true))
            {
                for (var i = 0; i < data.Length; i++)
                {
                    //if (data[i] != *(pblock + i))
                    if (data[i] != reader.ReadByte())
                    {
                        throw new Exception("Failed at " + i);
                    }
                }
            }

            return;

            if (stream.Position != stream.Length)
            {
                throw new Exception("Invalid position: " + stream.Position);
            }

            stream.Position = 0;
        }
        public unsafe void Test()
        {
            var pool = new DynamicMemoryPool();

            uint blocksize = 234401;
            var pblock = (byte*)pool.Alloc(blocksize);
            var stream = new MemoryViewStream();
            stream.Attach(pblock, blocksize);

            var data = new byte[blocksize];
            for (var i = 0; i < data.Length; i++)
            {
                data[i] = (byte)i;
            }

            using (var writer = new BinaryWriter(stream, Encoding.UTF8, true))
            {
                writer.Write(data, 0, data.Length);
            }

            if (stream.Position != stream.Length)
            {
                throw new Exception("Invalid position: " + stream.Position);
            }

            stream.Seek(0, SeekOrigin.Begin);

            if (stream.Position != 0)
            {
                throw new Exception("Invalid position: " + stream.Position);
            }

            using (var reader = new BinaryReader(stream, Encoding.UTF8, true))
            {
                for (var i = 0; i < data.Length; i++)
                {
                    //if (data[i] != *(pblock + i))
                    if (data[i] != reader.ReadByte())
                    {
                        throw new Exception("Failed at " + i);
                    }
                }
            }

            return;

            if (stream.Position != stream.Length)
            {
                throw new Exception("Invalid position: " + stream.Position);
            }

            stream.Position = 0;
        }
Esempio n. 3
0
        private void RebuildUnmanagedData()
        {
            var newpool = new DynamicMemoryPool();

            Action <object> action = x => ((DocumentDataContainer)x).MigrateRAM(newpool);
            var             tasks  = m_documentDataContainers.Values.Select(x =>
            {
                var x1 = x;
                return(new Task(action, x1));
            }).ToArray();

            try
            {
                try
                {
                    foreach (var t in tasks)
                    {
                        t.Start();
                    }

                    Task.WaitAll(tasks);
                }
                catch
                {
                    newpool.Dispose();
                    throw;
                }

                try
                {
                    m_memoryPool.Dispose();
                }
                finally
                {
                    m_memoryPool = newpool;
                }
            }
            catch
            {
                foreach (var c in m_documentDataContainers.Values)
                {
                    c.MarkAsInvalid();
                }

                throw;
            }
        }
Esempio n. 4
0
        public unsafe void TestMethod1()
        {
            //var segmentSize = 1000000U;
            var chunkSize = 1000U;
            //var pool = new FixedMemoryPool(segmentSize);
            var pool = new DynamicMemoryPool();

            Action test = () =>
            {
                for (var i = 0; i < 1000000; i++)
                {
                    if (i % 100000 == 0)
                    {
                        Console.Write("Step " + i);
                        Console.Write(" : ");
                    }
                    //pool.Free(pool.Alloc(chunkSize));
                    pool.Alloc(chunkSize);
                }
            };

            var threads = new Task[12];

            for (var i = 0; i < threads.Length; i++)
            {
                threads[i] = new Task(test, TaskCreationOptions.LongRunning);
            }

            foreach (var task in threads)
            {
                task.Start();
            }

            foreach (var task in threads)
            {
                task.Wait();
            }

            Console.ReadLine();
        }
Esempio n. 5
0
        private void RebuildUnmanagedData()
        {
            var newpool = new DynamicMemoryPool();

            Action<object> action = x => ((DocumentDataContainer)x).MigrateRAM(newpool);
            var tasks = m_documentDataContainers.Values.Select(x =>
                {
                    var x1 = x;
                    return new Task(action, x1);
                }).ToArray();

            try
            {
                try
                {
                    foreach (var t in tasks)
                    {
                        t.Start();
                    }

                    Task.WaitAll(tasks);
                }
                catch
                {
                    newpool.Dispose();
                    throw;
                }

                try
                {
                    m_memoryPool.Dispose();
                }
                finally
                {
                    m_memoryPool = newpool;
                }
            }
            catch
            {
                foreach (var c in m_documentDataContainers.Values)
                {
                    c.MarkAsInvalid();
                }

                throw;
            }
        }