Example #1
0
        private void Stream_Parallel_ReadWrite(int dataSize, int nodeCount, int bufferSize, bool bench)
        {
            int iterations = 10;

            byte[] data = new byte[dataSize];
            string name = Guid.NewGuid().ToString();

            // Fill with random data
            Random r = new Random();

            r.NextBytes(data);

            Stopwatch sw = new Stopwatch();

            sw.Start();
            for (int i = 0; i < iterations; i++)
            {
                using (SharedMemoryStream buffer = new SharedMemoryStream(name, nodeCount, bufferSize))
                    using (SharedMemoryStreamWriter <byte[]> writer = new SharedMemoryStreamWriter <byte[]>(buffer))
                        using (SharedMemoryStreamReader <byte[]> reader = new SharedMemoryStreamReader <byte[]>(buffer))
                        {
                            Action wt = () =>
                            {
                                writer.WriteObject(data);
                                Debug.WriteLine("Write done.", "Information");
                            };

                            Action rd = () =>
                            {
                                reader.ReadObject();
                                Debug.WriteLine("Read done.", "Information");
                            };

                            Task tWriter = Task.Factory.StartNew(wt);
                            Task tReader = Task.Factory.StartNew(rd);

                            if (!Task.WaitAll(new Task[] { tWriter, tReader }, 1200000))
                            {
                                Assert.Fail("Reader or writer took too long");
                            }
                        }
            }
            sw.Stop();
            double dataRate = Math.Round(((double)iterations * dataSize) / sw.ElapsedMilliseconds, 2);

            if (bench)
            {
                Console.WriteLine(dataSize + ";" + dataRate + ";" + sw.ElapsedMilliseconds + ";" + nodeCount + ";" + bufferSize);
            }
            else
            {
                Console.WriteLine("Data Rate: " + dataRate + "kB/s (" + sw.ElapsedMilliseconds + "ms to write " + iterations + "x" + dataSize + "=" + iterations * dataSize + " bytes in " + nodeCount + "x" + bufferSize + "=" + nodeCount * bufferSize + ")");
            }
        }
Example #2
0
        public void Stream_Object_ReadWrite()
        {
            string   name     = Guid.NewGuid().ToString();
            DateTime expected = DateTime.Now;

            using (SharedMemoryStream buffer = new SharedMemoryStream(name))
                using (SharedMemoryStreamWriter <DateTime> writer = new SharedMemoryStreamWriter <DateTime>(buffer))
                    using (SharedMemoryStreamReader <DateTime> reader = new SharedMemoryStreamReader <DateTime>(buffer))
                    {
                        writer.WriteObject(expected);
                        writer.Flush();
                        DateTime red = reader.ReadObject();
                        Assert.AreEqual(expected, red);
                    }
        }
Example #3
0
        private void Stream_Parallel_Types_ReadWrite <T>(T data)
        {
            int    iterations = 10;
            string name       = Guid.NewGuid().ToString();

            Stopwatch sw = new Stopwatch();

            sw.Start();
            for (int i = 0; i < iterations; i++)
            {
                using (SharedMemoryStream buffer = new SharedMemoryStream(name))
                    using (SharedMemoryStreamWriter <T> writer = new SharedMemoryStreamWriter <T>(buffer))
                        using (SharedMemoryStreamReader <T> reader = new SharedMemoryStreamReader <T>(buffer))
                        {
                            Action wt = () =>
                            {
                                writer.WriteObject(data);
                                Debug.WriteLine("Write done.", "Information");
                            };

                            Action rd = () =>
                            {
                                reader.ReadObject();
                                Debug.WriteLine("Read done.", "Information");
                            };

                            Task tWriter = Task.Factory.StartNew(wt);
                            Task tReader = Task.Factory.StartNew(rd);

                            if (!Task.WaitAll(new Task[] { tWriter, tReader }, 60000))
                            {
                                Assert.Fail("Reader or writer took too long");
                            }
                        }
            }
            sw.Stop();
            double time = Math.Round(sw.ElapsedMilliseconds / (double)iterations, 2);

            Console.WriteLine("Time: " + time + "ms, Type: " + typeof(T).FullName);
        }