public void Parser2ProfileBenchmark() { var xml = new XElement("root"); for (int i = 0; i < NamespaceCount; i++) { String k = randomString(); String v = randomString(); ns[i] = v; xml.Add(new XAttribute(XNamespace.Xmlns + k, v)); } for (var i = 0; i < NodePerLevelCount; i++) { xml.Add(createElement(Depth)); } String xmlcode = xml.ToString(); //Console.WriteLine(xmlcode); Console.WriteLine("xml length: {0}", xmlcode.Length); String bxlcode = new BxlGenerator().Convert(xml); //Console.WriteLine(bxlcode); Console.WriteLine("bxl length: {0}", bxlcode.Length); for (var i = 0; i < 100; i++) { new BxlParser().Parse(bxlcode); } }
public void ParserBenchmark() { var xml = new XElement("root"); for (int i = 0; i < NamespaceCount; i++) { String k = randomString(); String v = randomString(); ns[i] = v; xml.Add(new XAttribute(XNamespace.Xmlns + k, v)); } for (var i = 0; i < NodePerLevelCount; i++) { xml.Add(createElement(Depth)); } String xmlcode = xml.ToString(); //Console.WriteLine(xmlcode); Console.WriteLine("xml length: {0}", xmlcode.Length); String bxlcode = new BxlGenerator().Convert(xml); //Console.WriteLine(bxlcode); Console.WriteLine("bxl length: {0}", bxlcode.Length); var sw = Stopwatch.StartNew(); for (var i = 0; i < 20; i++) { XElement.Parse(xmlcode); } sw.Stop(); var xmltime = sw.ElapsedMilliseconds; sw = Stopwatch.StartNew(); for (var i = 0; i < 20; i++) { new BxlParser().Parse(bxlcode); } sw.Stop(); var bxl1time = sw.ElapsedMilliseconds; sw = Stopwatch.StartNew(); for (var i = 0; i < 20; i++) { new BxlParser().Parse(bxlcode); } sw.Stop(); var bxl2time = sw.ElapsedMilliseconds; Console.WriteLine("xml: {0}\nbxl1: {1}\nbxl2: {2}", xmltime, bxl1time, bxl2time); Assert.True(bxl2time < bxl1time); }
/// <summary> /// generates single bxl string from assembly manifests /// </summary> /// <param name="assemblies"> </param> /// <param name="options"> </param> /// <returns> </returns> public string GenerateManifest(Assembly[] assemblies, ManifestBxlGeneratorOptions options = null) { if (assemblies == null) { throw new ArgumentNullException("assemblies"); } if (0 == assemblies.Length) { throw new ArgumentException("no assemblies given"); } var gen = new BxlGenerator(); var genopts = new BxlGeneratorOptions { NoRootElement = true, UseTrippleQuotOnValues = false, InlineAlwaysAttributes = new[] {"code", "name", "priority"} }; options = options ?? new ManifestBxlGeneratorOptions(); var xml = new XElement("root"); IList<IComponentDefinition> componentsToGenerate = new List<IComponentDefinition>(); foreach (var assembly in assemblies.Distinct()) { Console.WriteLine("Enter: " + assembly.GetName().Name); var def = new AssemblyManifestDefinition(assembly, NeedExportAttribute); if (def.Descriptor != null) { Console.WriteLine("IsConfigurable: " + assembly.GetName().Name); foreach (var classDefinition in def.ComponentDefinitions) { componentsToGenerate.Add(classDefinition.GetComponent()); } } } var useshortnames = false; if (options.UseShortNames) { useshortnames = CanUseShortNames(componentsToGenerate); } if (useshortnames) { foreach (var assembly in assemblies) { var def = new AssemblyManifestDefinition(assembly, NeedExportAttribute); if (def.Descriptor != null) { xml.Add(new XElement("ref", new XAttribute("code", assembly.GetName().Name))); } } var namespaces = componentsToGenerate.Select(x => x.ServiceType).Union(componentsToGenerate.Select(x => x.ImplementationType)) .Distinct().Select(x => x.Namespace).Distinct(); foreach (var ns in namespaces) { xml.Add(new XElement("using", new XAttribute("code", ns))); } } foreach (var definition in componentsToGenerate) { var elementname = definition.Lifestyle.ToString().ToLowerInvariant(); var value = GetTypeName(definition.ServiceType, useshortnames); var e = new XElement(elementname, value); if (definition.Name.IsEmpty()) { e.Add(new XAttribute("code", GetTypeName(definition.ImplementationType, useshortnames))); } else { e.Add(new XAttribute("code", definition.Name)); e.Add(new XAttribute("name", GetTypeName(definition.ImplementationType, useshortnames))); } e.Add(new XAttribute("priority", definition.Priority)); if (definition.Role.IsNotEmpty()) { e.Add(new XAttribute("role", definition.Role)); } if (definition.Help.IsNotEmpty()) { e.Add(new XAttribute("help", definition.Help)); } xml.Add(e); } var result = gen.Convert(xml, genopts); return result; }
/// <summary> /// generates single bxl string from assembly manifests /// </summary> /// <param name="assemblies"> </param> /// <param name="options"> </param> /// <returns> </returns> public string GenerateManifest(Assembly[] assemblies, ManifestBxlGeneratorOptions options = null) { if (assemblies == null) { throw new ArgumentNullException("assemblies"); } if (0 == assemblies.Length) { throw new ArgumentException("no assemblies given"); } var gen = new BxlGenerator(); var genopts = new BxlGeneratorOptions { NoRootElement = true, UseTrippleQuotOnValues = false, InlineAlwaysAttributes = new[] { "code", "name", "priority" } }; options = options ?? new ManifestBxlGeneratorOptions(); var xml = new XElement("root"); IList <IComponentDefinition> componentsToGenerate = new List <IComponentDefinition>(); foreach (var assembly in assemblies.Distinct()) { Console.WriteLine("Enter: " + assembly.GetName().Name); var def = new AssemblyManifestDefinition(assembly, NeedExportAttribute); if (def.Descriptor != null) { Console.WriteLine("IsConfigurable: " + assembly.GetName().Name); foreach (var classDefinition in def.ComponentDefinitions) { componentsToGenerate.Add(classDefinition.GetComponent()); } } } var useshortnames = false; if (options.UseShortNames) { useshortnames = CanUseShortNames(componentsToGenerate); } if (useshortnames) { foreach (var assembly in assemblies) { var def = new AssemblyManifestDefinition(assembly, NeedExportAttribute); if (def.Descriptor != null) { xml.Add(new XElement("ref", new XAttribute("code", assembly.GetName().Name))); } } var namespaces = componentsToGenerate.Select(x => x.ServiceType).Union(componentsToGenerate.Select(x => x.ImplementationType)) .Distinct().Select(x => x.Namespace).Distinct(); foreach (var ns in namespaces) { xml.Add(new XElement("using", new XAttribute("code", ns))); } } foreach (var definition in componentsToGenerate) { var elementname = definition.Lifestyle.ToString().ToLowerInvariant(); var value = GetTypeName(definition.ServiceType, useshortnames); var e = new XElement(elementname, value); if (definition.Name.IsEmpty()) { e.Add(new XAttribute("code", GetTypeName(definition.ImplementationType, useshortnames))); } else { e.Add(new XAttribute("code", definition.Name)); e.Add(new XAttribute("name", GetTypeName(definition.ImplementationType, useshortnames))); } e.Add(new XAttribute("priority", definition.Priority)); if (definition.Role.IsNotEmpty()) { e.Add(new XAttribute("role", definition.Role)); } if (definition.Help.IsNotEmpty()) { e.Add(new XAttribute("help", definition.Help)); } xml.Add(e); } var result = gen.Convert(xml, genopts); return(result); }
protected override void Save(XElement x, string file) { var c = new BxlGenerator(); var opts = new BxlGeneratorOptions {SkipAttributes = new[] {"_line", "_file"}, NoRootElement = true}; File.WriteAllText(file, c.Convert(x)); }