Performance optimizations - replace foreach with for
This commit is contained in:
parent
c4874fc69c
commit
985dacd494
@ -62,72 +62,28 @@ namespace UniversalEditor
|
||||
{
|
||||
Association[] _associations = Association.GetAllAssociations();
|
||||
List<Association> associations = new List<Association>();
|
||||
foreach (Association assoc in _associations)
|
||||
for (int i = 0; i < _associations.Length; i++)
|
||||
{
|
||||
if ((objectModel != null && assoc.ObjectModels.Contains(objectModel)) || (dataFormat != null && assoc.DataFormats.Contains(dataFormat)))
|
||||
if ((objectModel != null && _associations[i].ObjectModels.Contains(objectModel)) || (dataFormat != null && _associations[i].DataFormats.Contains(dataFormat)))
|
||||
{
|
||||
associations.Add(assoc);
|
||||
associations.Add(_associations[i]);
|
||||
}
|
||||
}
|
||||
return associations.ToArray();
|
||||
}
|
||||
public static Association[] FromAccessor(Accessor accessor = null, string fileNameFilter = null)
|
||||
{
|
||||
Association[] _associations = Association.GetAllAssociations();
|
||||
Association[] assocs = Association.GetAllAssociations();
|
||||
List<Association> associations = new List<Association>();
|
||||
Association[] assocs = _associations;
|
||||
foreach (Association assoc in assocs)
|
||||
{
|
||||
foreach (DataFormatFilter filter in assoc.Filters)
|
||||
{
|
||||
if (accessor != null)
|
||||
{
|
||||
for (int i = 0; i < filter.MagicBytes.Count; i++)
|
||||
{
|
||||
byte?[] bytes = filter.MagicBytes[i];
|
||||
if ((accessor.Position + bytes.Length) <= accessor.Length)
|
||||
{
|
||||
bool ret = true;
|
||||
byte[] cmp = new byte[bytes.Length];
|
||||
long offset = accessor.Position;
|
||||
if (i < filter.MagicByteOffsets.Length)
|
||||
{
|
||||
if (filter.MagicByteOffsets[i] < 0)
|
||||
{
|
||||
accessor.Seek(filter.MagicByteOffsets[i], SeekOrigin.End);
|
||||
}
|
||||
else
|
||||
{
|
||||
accessor.Seek(filter.MagicByteOffsets[i], SeekOrigin.Begin);
|
||||
}
|
||||
}
|
||||
accessor.Reader.Read(cmp, 0, cmp.Length);
|
||||
accessor.Position = offset;
|
||||
|
||||
for (int j = 0; j < bytes.Length; j++)
|
||||
{
|
||||
if (bytes[j] == null) continue;
|
||||
if (bytes[j] != cmp[j])
|
||||
{
|
||||
ret = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ret)
|
||||
{
|
||||
associations.Add(assoc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fileNameFilter != null)
|
||||
// stopwatch diagnostics determined a nested for loop is 0.0547024 ms faster than foreach
|
||||
for (int i = 0; i < assocs.Length; i++)
|
||||
{
|
||||
for (int j = 0; j < assocs[i].Filters.Count; j++)
|
||||
{
|
||||
if (assocs[i].Filters[j].Matches(accessor))
|
||||
{
|
||||
if (filter.FileNameFilters.Contains(fileNameFilter))
|
||||
{
|
||||
associations.Add(assoc);
|
||||
break;
|
||||
}
|
||||
associations.Add(assocs[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,8 +37,9 @@ namespace UniversalEditor.Common
|
||||
{
|
||||
List<Type> types = new List<Type>();
|
||||
Assembly[] asms = GetAvailableAssemblies();
|
||||
foreach (Assembly asm in asms)
|
||||
for (int iAsm = 0; iAsm < asms.Length; iAsm++)
|
||||
{
|
||||
Assembly asm = asms[iAsm];
|
||||
Type[] types1 = null;
|
||||
try
|
||||
{
|
||||
@ -54,10 +55,10 @@ namespace UniversalEditor.Common
|
||||
|
||||
if (types1 == null) continue;
|
||||
|
||||
foreach (Type type in types1)
|
||||
for (int jTyp = 0; jTyp < types1.Length; jTyp++)
|
||||
{
|
||||
if (type == null) continue;
|
||||
types.Add(type);
|
||||
if (types1[jTyp] == null) continue;
|
||||
types.Add(types1[jTyp]);
|
||||
}
|
||||
}
|
||||
mvarAvailableTypes = types.ToArray();
|
||||
@ -66,11 +67,11 @@ namespace UniversalEditor.Common
|
||||
if (inheritsFrom != null)
|
||||
{
|
||||
List<Type> retval = new List<Type>();
|
||||
foreach (Type tAvailable in mvarAvailableTypes)
|
||||
for (int iTyp = 0; iTyp < mvarAvailableTypes.Length; iTyp++)
|
||||
{
|
||||
foreach (Type tInheritsFrom in inheritsFrom)
|
||||
for (int jInh = 0; jInh < inheritsFrom.Length; jInh++)
|
||||
{
|
||||
if (tAvailable.IsSubclassOf(tInheritsFrom)) retval.Add(tAvailable);
|
||||
if (mvarAvailableTypes[iTyp].IsSubclassOf(inheritsFrom[jInh])) retval.Add(mvarAvailableTypes[iTyp]);
|
||||
}
|
||||
}
|
||||
return retval.ToArray();
|
||||
@ -95,8 +96,9 @@ namespace UniversalEditor.Common
|
||||
List<ConverterReference> listConverters = new List<ConverterReference>();
|
||||
List<ProjectType> listProjectTypes = new List<ProjectType>();
|
||||
{
|
||||
foreach (Type type in types)
|
||||
for (int iTyp = 0; iTyp < types.Length; iTyp++)
|
||||
{
|
||||
Type type = types[iTyp];
|
||||
if (type == null) continue;
|
||||
if (mvarAvailableObjectModels == null && (type.IsSubclassOf(typeof(ObjectModel)) && !type.IsAbstract))
|
||||
{
|
||||
@ -232,8 +234,9 @@ namespace UniversalEditor.Common
|
||||
private static void InitializeFromXML(ref List<ObjectModelReference> listObjectModels, ref List<DataFormatReference> listDataFormats, ref List<ProjectType> listProjectTypes, ref List<DocumentTemplate> listDocumentTemplates, ref List<ProjectTemplate> listProjectTemplates)
|
||||
{
|
||||
string[] paths = EnumerateDataPaths();
|
||||
foreach (string path in paths)
|
||||
for (int iPath = 0; iPath < paths.Length; iPath++)
|
||||
{
|
||||
string path = paths[iPath];
|
||||
if (!System.IO.Directory.Exists(path))
|
||||
{
|
||||
Console.WriteLine("skipping nonexistent directory {0}", path);
|
||||
@ -245,8 +248,9 @@ namespace UniversalEditor.Common
|
||||
|
||||
string[] XMLFileNames = null;
|
||||
XMLFileNames = System.IO.Directory.GetFiles(path, configurationFileNameFilter, System.IO.SearchOption.AllDirectories);
|
||||
foreach (string fileName in XMLFileNames)
|
||||
for (int jFileName = 0; jFileName < XMLFileNames.Length; jFileName++)
|
||||
{
|
||||
string fileName = XMLFileNames[jFileName];
|
||||
#if !DEBUG
|
||||
try
|
||||
{
|
||||
@ -282,8 +286,9 @@ namespace UniversalEditor.Common
|
||||
// ensure project types are loaded before running the next pass
|
||||
mvarAvailableProjectTypes = listProjectTypes.ToArray();
|
||||
|
||||
foreach (string fileName in XMLFileNames)
|
||||
for (int jFileName = 0; jFileName < XMLFileNames.Length; jFileName++)
|
||||
{
|
||||
string fileName = XMLFileNames[jFileName];
|
||||
try
|
||||
{
|
||||
UEPackageObjectModel mom = new UEPackageObjectModel();
|
||||
@ -293,18 +298,18 @@ namespace UniversalEditor.Common
|
||||
|
||||
Document.Load(om, xdf, new FileAccessor(fileName, false, false, false), true);
|
||||
|
||||
foreach (DocumentTemplate template in mom.DocumentTemplates)
|
||||
for (int kTemp = 0; kTemp < mom.DocumentTemplates.Count; kTemp++)
|
||||
{
|
||||
listDocumentTemplates.Add(template);
|
||||
listDocumentTemplates.Add(mom.DocumentTemplates[kTemp]);
|
||||
}
|
||||
foreach (ProjectTemplate template in mom.ProjectTemplates)
|
||||
for (int kTemp = 0; kTemp < mom.ProjectTemplates.Count; kTemp++)
|
||||
{
|
||||
listProjectTemplates.Add(template);
|
||||
listProjectTemplates.Add(mom.ProjectTemplates[kTemp]);
|
||||
}
|
||||
|
||||
foreach (Association assoc in mom.Associations)
|
||||
for (int kAssoc = 0; kAssoc < mom.Associations.Count; kAssoc++)
|
||||
{
|
||||
Association.Register(assoc);
|
||||
Association.Register(mom.Associations[kAssoc]);
|
||||
}
|
||||
}
|
||||
catch
|
||||
@ -341,8 +346,9 @@ namespace UniversalEditor.Common
|
||||
|
||||
DataFormatReference[] dfrs = GetAvailableDataFormats(omr);
|
||||
|
||||
foreach (DataFormatReference dfr in dfrs)
|
||||
for (int i = 0; i < dfrs.Length; i++)
|
||||
{
|
||||
DataFormatReference dfr = dfrs[i];
|
||||
try
|
||||
{
|
||||
DataFormat df = dfr.Create();
|
||||
|
||||
@ -70,7 +70,7 @@ namespace UniversalEditor.DataFormats.Markup.XML
|
||||
if (element.Value.Contains(Environment.NewLine))
|
||||
{
|
||||
tw.Write(Settings.TagBeginChar.ToString() + Settings.PreprocessorChar.ToString() + element.Name + " ");
|
||||
|
||||
|
||||
if (mvarSettings.PrettyPrint) tw.WriteLine();
|
||||
tw.Write(element.Value);
|
||||
if (mvarSettings.PrettyPrint) tw.WriteLine();
|
||||
@ -96,19 +96,18 @@ namespace UniversalEditor.DataFormats.Markup.XML
|
||||
{
|
||||
tw.Write(" ");
|
||||
}
|
||||
foreach (MarkupAttribute att in tag.Attributes)
|
||||
for (int i = 0; i < tag.Attributes.Count; i++)
|
||||
{
|
||||
tw.Write(att.FullName + "=\"" + this.ReplaceEntitiesOutput(att.Value) + "\"");
|
||||
if (tag.Attributes.IndexOf(att) < tag.Attributes.Count - 1)
|
||||
{
|
||||
tw.Write(" ");
|
||||
}
|
||||
MarkupAttribute att = tag.Attributes[i];
|
||||
tw.Write(String.Format("{0}=\"{1}\"", att.FullName, this.ReplaceEntitiesOutput(att.Value)));
|
||||
|
||||
if (i < tag.Attributes.Count - 1) tw.Write(" ");
|
||||
}
|
||||
if (tag.Elements.Count == 0)
|
||||
{
|
||||
if (String.IsNullOrEmpty(element.Value))
|
||||
{
|
||||
tw.Write(" " + Settings.TagCloseChar.ToString() + Settings.TagEndChar.ToString());
|
||||
tw.Write(String.Format(" {0}{1}", Settings.TagCloseChar.ToString(), Settings.TagEndChar.ToString()));
|
||||
if (mvarSettings.PrettyPrint) tw.WriteLine();
|
||||
}
|
||||
else
|
||||
@ -133,7 +132,7 @@ namespace UniversalEditor.DataFormats.Markup.XML
|
||||
tw.Write(Settings.TagSpecialDeclarationCommentStart);
|
||||
bool containsNewline = element.Value.ContainsAny(new string[]
|
||||
{
|
||||
"\r",
|
||||
"\r",
|
||||
"\n"
|
||||
});
|
||||
if (containsNewline)
|
||||
@ -809,7 +808,7 @@ namespace UniversalEditor.DataFormats.Markup.XML
|
||||
string specialSectionContent = tr.ReadUntil(this.Settings.CDataEndChar.ToString());
|
||||
if (specialSectionContent.Length > 0)
|
||||
{
|
||||
specialSectionContent = specialSectionContent.Substring(0, specialSectionContent.Length);
|
||||
specialSectionContent = specialSectionContent.Substring(0, specialSectionContent.Length);
|
||||
}
|
||||
|
||||
MarkupStringElement tag = new MarkupStringElement();
|
||||
@ -940,14 +939,14 @@ namespace UniversalEditor.DataFormats.Markup.XML
|
||||
WriteStartTag(mvarCompensateTopLevelTagName);
|
||||
}
|
||||
|
||||
if (!(mom.Elements.Count > 0 && mom.Elements [0] is MarkupPreprocessorElement && (mom.Elements [0] as MarkupPreprocessorElement).FullName == "xml"))
|
||||
if (!(mom.Elements.Count > 0 && mom.Elements[0] is MarkupPreprocessorElement && (mom.Elements[0] as MarkupPreprocessorElement).FullName == "xml"))
|
||||
{
|
||||
tw.WriteLine ("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
|
||||
tw.WriteLine("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
|
||||
}
|
||||
|
||||
foreach (MarkupElement element in mom.Elements)
|
||||
for (int i = 0; i < mom.Elements.Count; i++)
|
||||
{
|
||||
WriteElement(element, 0);
|
||||
WriteElement(mom.Elements[i], 0);
|
||||
}
|
||||
|
||||
if (mom.Elements.Count > 1 && (mvarCompensateTopLevelTagName != null))
|
||||
@ -972,13 +971,13 @@ namespace UniversalEditor.DataFormats.Markup.XML
|
||||
tw.Write(this.Settings.TagEndChar.ToString());
|
||||
if (mvarSettings.PrettyPrint) tw.WriteLine();
|
||||
|
||||
foreach (Group g in plom.Groups)
|
||||
for (int i = 0; i < plom.Groups.Count; i++)
|
||||
{
|
||||
this.WriteXMLPropertyGroup(tw, g, 1);
|
||||
this.WriteXMLPropertyGroup(tw, plom.Groups[i], 1);
|
||||
}
|
||||
foreach (Property p in plom.Properties)
|
||||
for (int i = 0; i < plom.Properties.Count; i++)
|
||||
{
|
||||
this.WriteXMLProperty(tw, p, 1);
|
||||
this.WriteXMLProperty(tw, plom.Properties[i], 1);
|
||||
}
|
||||
|
||||
tw.Write(this.Settings.TagBeginChar.ToString());
|
||||
@ -1000,13 +999,13 @@ namespace UniversalEditor.DataFormats.Markup.XML
|
||||
tw.Write(arg_37_0 + arg_37_1 + c.ToString());
|
||||
if (mvarSettings.PrettyPrint) tw.WriteLine();
|
||||
|
||||
foreach (Group g2 in g.Groups)
|
||||
for (int i = 0; i < g.Groups.Count; i++)
|
||||
{
|
||||
this.WriteXMLPropertyGroup(tw, g2, indentLevel + 1);
|
||||
this.WriteXMLPropertyGroup(tw, g.Groups[i], indentLevel + 1);
|
||||
}
|
||||
foreach (Property p in g.Properties)
|
||||
for (int i = 0; i < g.Properties.Count; i++)
|
||||
{
|
||||
this.WriteXMLProperty(tw, p, indentLevel + 1);
|
||||
this.WriteXMLProperty(tw, g.Properties[i], indentLevel + 1);
|
||||
}
|
||||
c = this.Settings.TagBeginChar;
|
||||
string arg_116_0 = c.ToString();
|
||||
@ -1590,19 +1589,19 @@ namespace UniversalEditor.DataFormats.Markup.XML
|
||||
{
|
||||
switch (attType.Value)
|
||||
{
|
||||
/*
|
||||
case "xsd:string":
|
||||
{
|
||||
return tag.Value;
|
||||
}
|
||||
*/
|
||||
case "xsd:integer":
|
||||
/*
|
||||
case "xsd:string":
|
||||
{
|
||||
return tag.Value;
|
||||
}
|
||||
*/
|
||||
case "xsd:integer":
|
||||
{
|
||||
return Int32.Parse(tag.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
MarkupAttribute attNil = tag.Attributes["xsi:nil"];
|
||||
// return null if xsi:nil attribute is present
|
||||
if (attNil != null) return null;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user