diff --git a/src/PerfView/PerfView.csproj b/src/PerfView/PerfView.csproj
index 8815c8665..02a1dbc08 100644
--- a/src/PerfView/PerfView.csproj
+++ b/src/PerfView/PerfView.csproj
@@ -254,6 +254,13 @@
System.Reflection.Metadata.dll
False
+
+ Non-Resx
+ false
+ .\System.Runtime.CompilerServices.Unsafe.dll
+ System.Runtime.CompilerServices.Unsafe.dll
+ False
+
Non-Resx
false
diff --git a/src/TraceEvent/TraceEvent.cs b/src/TraceEvent/TraceEvent.cs
index e93624e38..1414313d6 100644
--- a/src/TraceEvent/TraceEvent.cs
+++ b/src/TraceEvent/TraceEvent.cs
@@ -15,6 +15,7 @@
#endif
using System.IO;
using System.Reflection;
+using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
using Address = System.UInt64;
@@ -4368,19 +4369,19 @@ internal static unsafe Guid ReadGuid(IntPtr pointer, int offset)
}
internal static unsafe double ReadDouble(IntPtr pointer, int offset)
{
- return *((double*)((byte*)pointer.ToPointer() + offset));
+ return Unsafe.ReadUnaligned((byte*)pointer.ToPointer() + offset);
}
internal static unsafe float ReadSingle(IntPtr pointer, int offset)
{
- return *((float*)((byte*)pointer.ToPointer() + offset));
+ return Unsafe.ReadUnaligned((byte*)pointer.ToPointer() + offset);
}
internal static unsafe long ReadInt64(IntPtr pointer, int offset)
{
- return *((long*)((byte*)pointer.ToPointer() + offset));
+ return Unsafe.ReadUnaligned((byte*)pointer.ToPointer() + offset);
}
internal static unsafe int ReadInt32(IntPtr pointer, int offset)
{
- return *((int*)((byte*)pointer.ToPointer() + offset));
+ return Unsafe.ReadUnaligned((byte*)pointer.ToPointer() + offset);
}
internal static unsafe short ReadInt16(IntPtr pointer, int offset)
{
diff --git a/src/TraceEvent/TraceEvent.csproj b/src/TraceEvent/TraceEvent.csproj
index 079957daf..97bb4a419 100644
--- a/src/TraceEvent/TraceEvent.csproj
+++ b/src/TraceEvent/TraceEvent.csproj
@@ -68,6 +68,7 @@
+