Ejemplo n.º 1
0
        // Count occurrences of byte values in a file
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("Need a file name!");
                return;
            }

            var fileName = args [0];

            var funcs = new Dictionary <string, Func <ByteTable> > {
                { "Stream", () => CountFromStream(fileName) },                      // Process one byte at a time
                { "Memory", () => CountFromMemory(fileName) },                      // Read all in memory and then process
                { "Chunks", () => CountFromChunks(fileName) },                      // Read and process one chunk (1MiB) at a time
                { "Parallel", () => CountFromChunksParallel(fileName) },            // Read and process chunks (1MiB) in parallel (PLINQ)

                { "PC", () => CountProducerConsumer(fileName) },                    // Producer (read from disk) and 1 Consumer (count bytes)
                { "P2C", () => CountProducerNConsumers(fileName, 2) },              // ... 2 Consumers
                { "P3C", () => CountProducerNConsumers(fileName, 3) },              // ... 3 Consumers
                { "P8C", () => CountProducerNConsumers(fileName, 8) },              // ... 8 Consumers
                { "P16C", () => CountProducerNConsumers(fileName, 16) }             // ... 16 Consumers
            };

            ByteTable baseline = null;

            foreach (var tuple in funcs)
            {
                var name = tuple.Key;
                var func = tuple.Value;

                Console.Write("{0}...", name);
                var watch = new Stopwatch();
                watch.Start();
                var result = func();
                Console.Write("\tTime: {0}ms", watch.ElapsedMilliseconds);

                if (baseline == null)
                {
                    baseline = result;
                    Console.WriteLine("\t[Baseline]");
                }
                else
                {
                    bool ok = baseline.Equals(result);
                    Console.WriteLine("\t[{0}]", ok ? "OK" : "Failed");
                }
            }
        }