Improve C# Object comparison by using native pointer compare #1061 #713 #795

This commit is contained in:
Wojtek Figat
2023-05-05 10:49:07 +02:00
parent f0176c3520
commit 5e31a678bd
3 changed files with 17 additions and 5 deletions

View File

@@ -187,7 +187,7 @@ namespace FlaxEditor.CustomEditors
{ {
for (int i = 0; i < Count; i++) for (int i = 0; i < Count; i++)
{ {
if (this[i] == referenceSceneObject) if ((SceneObject)this[i] == referenceSceneObject)
continue; continue;
if (this[i] == null || (this[i] is SceneObject valueSceneObject && valueSceneObject && valueSceneObject.PrefabObjectID != referenceSceneObject.PrefabObjectID)) if (this[i] == null || (this[i] is SceneObject valueSceneObject && valueSceneObject && valueSceneObject.PrefabObjectID != referenceSceneObject.PrefabObjectID))

View File

@@ -174,7 +174,7 @@ namespace FlaxEditor.GUI.Timeline.Tracks
continue; continue;
// Prevent from adding the same track twice // Prevent from adding the same track twice
if (SubTracks.Any(x => x is IObjectTrack y && y.Object == script)) if (SubTracks.Any(x => x is IObjectTrack y && y.Object as SceneObject == script))
continue; continue;
var name = Utilities.Utils.GetPropertyNameUI(script.GetType().Name); var name = Utilities.Utils.GetPropertyNameUI(script.GetType().Name);

View File

@@ -212,9 +212,11 @@ namespace FlaxEngine
/// <param name="right"></param> /// <param name="right"></param>
/// <returns></returns> /// <returns></returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator == (Object left, Object right) public static bool operator ==(Object left, Object right)
{ {
return Object.Equals(left, right); IntPtr leftPtr = (object)left != null ? left.__unmanagedPtr : IntPtr.Zero;
IntPtr rightPtr = (object)right != null ? right.__unmanagedPtr : IntPtr.Zero;
return leftPtr == rightPtr;
} }
/// <summary> /// <summary>
@@ -226,7 +228,17 @@ namespace FlaxEngine
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator !=(Object left, Object right) public static bool operator !=(Object left, Object right)
{ {
return !Object.Equals(left, right); IntPtr leftPtr = (object)left != null ? left.__unmanagedPtr : IntPtr.Zero;
IntPtr rightPtr = (object)right != null ? right.__unmanagedPtr : IntPtr.Zero;
return leftPtr != rightPtr;
}
/// <inheritdoc />
public override bool Equals(object obj)
{
if (obj is FlaxEngine.Object o)
return o.__unmanagedPtr == __unmanagedPtr;
return false;
} }
/// <summary> /// <summary>