Browse Source

Eliminate two more allocations

af/merge-core
Jason Nelson 8 years ago
parent
commit
53c9640a51
  1. 11
      src/ImageSharp/MetaData/Profiles/Exif/ExifReader.cs

11
src/ImageSharp/MetaData/Profiles/Exif/ExifReader.cs

@ -6,6 +6,8 @@ using System.Buffers.Binary;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
using SixLabors.ImageSharp.IO;
using SixLabors.ImageSharp.Primitives;
@ -122,11 +124,10 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
int length = data.Length / dataTypeSize;
var result = new TDataType[length];
var buffer = new byte[dataTypeSize];
for (int i = 0; i < length; i++)
{
data.Slice(i * dataTypeSize, dataTypeSize).CopyTo(buffer);
ReadOnlySpan<byte> buffer = data.Slice(i * dataTypeSize, dataTypeSize);
result.SetValue(converter(buffer), i);
}
@ -138,10 +139,16 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
private unsafe string ConvertToString(ReadOnlySpan<byte> buffer)
{
#if NETSTANDARD1_1
byte[] bytes = buffer.ToArray();
string result = Encoding.UTF8.GetString(bytes, 0, buffer.Length);
#else
byte* pointer = (byte*)Unsafe.AsPointer(ref MemoryMarshal.GetReference(buffer));
string result = Encoding.UTF8.GetString(pointer, buffer.Length);
#endif
int nullCharIndex = result.IndexOf('\0');
if (nullCharIndex != -1)
{

Loading…
Cancel
Save