Performance improvement in selected hot paths
The result of some performance analysis showed the following hot paths to be possible oppertunites for improvement.
In a use case which used the connection system, this seems to be a bottle neck:
OpenTap.IConstResourcePropertyHelpers.GetConstProperties
Another situation seems to be
OpenTap.dll!OpenTap.AnnotationCollection.Get<OpenTap.IMemberAnnotation>(bool recursive, object from) Unknown
OpenTap.dll!OpenTap.MemberValueAnnotation.read() Unknown
OpenTap.dll!OpenTap.MemberValueAnnotation.Value.get() Unknown
OpenTap.dll!OpenTap.DefaultDataAnnotator.BasicCollectionAnnotation.Read(object source) Unknown
OpenTap.dll!OpenTap.AnnotationCollection.Read() Unknown
OpenTap.dll!OpenTap.MergedValueAnnotation.Read(object source) Unknown
OpenTap.dll!OpenTap.AnnotationCollection.Read() Unknown
OpenTap.dll!OpenTap.ManyToOneAnnotation.Read(object source) Unknown
OpenTap.dll!OpenTap.AnnotationCollection.Read() Unknown
OpenTap.dll!OpenTap.AnnotationCollection.Read() Unknown
OpenTap.dll!OpenTap.MembersAnnotation.Read(object source) Unknown
OpenTap.dll!OpenTap.AnnotationCollection.Read() Unknown
Keysight.OpenTap.Wpf.dll!Keysight.OpenTap.Wpf.AvailableValuesControlProvider.CreateControl.__updateBox|0() Unknown
This seems very similar to:
mscorlib.dll!System.Collections.Generic.List<OpenTap.IAnnotation>.Enumerator.MoveNext() Unknown
OpenTap.dll!OpenTap.AnnotationCollection.Read() Unknown
OpenTap.dll!OpenTap.MergedValueAnnotation.Read(object source) Unknown
OpenTap.dll!OpenTap.AnnotationCollection.Read() Unknown
OpenTap.dll!OpenTap.ManyToOneAnnotation.Read(object source) Unknown
OpenTap.dll!OpenTap.AnnotationCollection.Read() Unknown
OpenTap.dll!OpenTap.AnnotationCollection.Read() Unknown
OpenTap.dll!OpenTap.MembersAnnotation.Read(object source) Unknown
OpenTap.dll!OpenTap.AnnotationCollection.Read() Unknown
Keysight.OpenTap.Wpf.dll!Keysight.OpenTap.Wpf.AvailableValuesControlProvider.CreateControl.__updateBox|0() Unknown
Here is a different location, seemingly related to OnEditedCallback:
System.Core.dll!System.Linq.Buffer<object>.ToArray()
System.Core.dll!System.Linq.Enumerable.ToArray<object>(System.Collections.Generic.IEnumerable<object> source)
OpenTap.dll!OpenTap.MergedValueAnnotation.Value.get()
OpenTap.dll!OpenTap.MembersAnnotation.Read(object source)
OpenTap.dll!OpenTap.AnnotationCollection.Read()
OpenTap.dll!OpenTap.ManyToOneAnnotation.Read(object source)
OpenTap.dll!OpenTap.AnnotationCollection.Read()
OpenTap.dll!OpenTap.AnnotationCollection.Read()
OpenTap.dll!OpenTap.MembersAnnotation.Read(object source)
OpenTap.dll!OpenTap.AnnotationCollection.Read()
Keysight.OpenTap.Wpf.dll!Keysight.OpenTap.Wpf.PropGrid.OnPropertyEdited(System.Windows.FrameworkElement control)
Finally it seems that serialization may be slow in deep heirachies. It seems that there is an oppertunity for caching the result of Enum.Format.
mscorlib.dll!System.ModuleHandle.ResolveTypeHandleInternal(System.Reflection.RuntimeModule module, int typeToken, System.RuntimeTypeHandle[] typeInstantiationContext, System.RuntimeTypeHandle[] methodInstantiationContext) Unknown
mscorlib.dll!System.Reflection.RuntimeModule.ResolveType(int metadataToken, System.Type[] genericTypeArguments, System.Type[] genericMethodArguments) Unknown
mscorlib.dll!System.Reflection.CustomAttribute.FilterCustomAttributeRecord(System.Reflection.CustomAttributeRecord caRecord, System.Reflection.MetadataImport scope, ref System.Reflection.Assembly lastAptcaOkAssembly, System.Reflection.RuntimeModule decoratedModule, System.Reflection.MetadataToken decoratedToken, System.RuntimeType attributeFilterType, bool mustBeInheritable, object[] attributes, System.Collections.IList derivedAttributes, out System.RuntimeType attributeType, out System.IRuntimeMethodInfo ctor, out bool ctorHasParameters, out bool isVarArg) Unknown
mscorlib.dll!System.Reflection.CustomAttribute.IsCustomAttributeDefined(System.Reflection.RuntimeModule decoratedModule, int decoratedMetadataToken, System.RuntimeType attributeFilterType, int attributeCtorToken, bool mustBeInheritable) Unknown
mscorlib.dll!System.Reflection.CustomAttribute.IsDefined(System.RuntimeType type, System.RuntimeType caType, bool inherit) Unknown
mscorlib.dll!System.Enum.InternalFormat(System.RuntimeType eT, object value) Unknown
OpenTap.dll!OpenTap.Plugins.ObjectSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.DefaultValueSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.ObjectSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.DefaultValueSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.TestStepListSerializer.Serialize(System.Xml.Linq.XElement elem, object target, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.DefaultValueSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.ObjectSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.DefaultValueSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.TestStepListSerializer.Serialize(System.Xml.Linq.XElement elem, object target, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.DefaultValueSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.ObjectSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.DefaultValueSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.TestStepListSerializer.Serialize(System.Xml.Linq.XElement elem, object target, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.DefaultValueSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.ObjectSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.DefaultValueSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.TestStepListSerializer.Serialize(System.Xml.Linq.XElement elem, object target, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.DefaultValueSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.ObjectSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.DefaultValueSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.TestStepListSerializer.Serialize(System.Xml.Linq.XElement elem, object target, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.DefaultValueSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.ObjectSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.DefaultValueSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.TestStepListSerializer.Serialize(System.Xml.Linq.XElement elem, object target, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.DefaultValueSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.ObjectSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.TestPlanSerializer.Serialize(System.Xml.Linq.XElement element, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.Plugins.DefaultValueSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.Package.dll!OpenTap.Package.TestPlanPackageDependency.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData type) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.Linq.XElement elem, object obj, OpenTap.ITypeData expectedType) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.Xml.XmlWriter writer, object obj) Unknown
OpenTap.dll!OpenTap.TapSerializer.Serialize(System.IO.Stream stream, object obj) Unknown
Editor.exe!Keysight.OpenTap.Gui.MainWindow.c.c(OpenTap.TestPlan A_0, System.Guid[] A_1) Unknown