コード例 #1
0
ファイル: Program.cs プロジェクト: ZeroInfinite/Performance
        private bool GenerateCode(IList <string> sources, bool useViewEngine, int iterations, bool dump = false)
        {
            if (useViewEngine)
            {
                for (var i = 0; i < sources.Count; i++)
                {
                    var source = sources[i];

                    var relativePath = source.Substring(BasePath.Length).Replace('\\', '/');

                    Console.WriteLine($"Creating view {relativePath}");

                    for (var j = 0; j < iterations; j++)
                    {
                        var view = ViewEngine.GetView(null, relativePath, isMainPage: true);
                        view.EnsureSuccessful(new string[0]);
                        GC.KeepAlive(view.View);

                        if (j > 0 && j % 10 == 0)
                        {
                            Console.WriteLine($"Completed iteration {j}");
                        }
                    }
                }
            }
            else
            {
                for (var i = 0; i < sources.Count; i++)
                {
                    var source              = sources[i];
                    var relativePath        = source.Substring(BasePath.Length);
                    var fileNameNoExtension = Path.GetFileNameWithoutExtension(source);

                    Console.WriteLine($"Generating {source}");

                    using (var stream = new FileStream(source, FileMode.Open))
                    {
                        for (var j = 0; j < iterations; j++)
                        {
                            var codeDocument = CompilationService.CreateCodeDocument(relativePath, stream);
                            var result       = CompilationService.ProcessCodeDocument(codeDocument);
                            if (result.Diagnostics.Count > 0)
                            {
                                Console.WriteLine($"Code generation failed for {source}");
                                foreach (var error in result.GeneratedCode)
                                {
                                    Console.WriteLine("\t" + error);
                                }

                                return(false);
                            }

                            if (j > 0 && j % 10 == 0)
                            {
                                Console.WriteLine($"Completed iteration {j}");
                            }

                            if (dump && j == iterations - 1)
                            {
                                var output = Path.ChangeExtension(source, ".cs");
                                Console.WriteLine($"Dumping generated code to {output}");
                                File.WriteAllText(output, result.GeneratedCode);
                            }
                        }

                        stream.Seek(0L, SeekOrigin.Begin);
                    }
                }
            }

            return(true);
        }