Преобразование существующего кода в Span <T>кажется медленнее? - PullRequest
0 голосов
/ 06 марта 2020

Учитывая Visual Studio 2019,. NET Проект Framework 4.7.2 (консольное приложение для тестирования). Пакет Nuget System.Memory установлен для получения Span.

. Экспериментируйте с новым Span / ReadOnlySpan, чтобы повысить производительность в других проектах. Я установил простой кусок кода:

    public class Tester
    {
      public string ParseNameSubstring(string name)
      {
        var firstNullIndex = name.IndexOf('\0');
        return (firstNullIndex == -1) ? name : name.Substring(0, firstNullIndex);
      }

      public ReadOnlySpan<char> ParseNameSpan(ReadOnlySpan<char> name)
      {
        var firstNullIndex = name.IndexOf('\0');
        return (firstNullIndex == -1) ? name : name.Slice(0, firstNullIndex);
      }
    }

 static void Main(string[] args)
    {
      var foo = "foo bar \0 blabla";
      Tester t = new Tester();
      Stopwatch sw = new Stopwatch();
      sw.Start();
      string str = t.ParseNameSpan(foo.AsSpan()).ToString();
      sw.Stop();
      Console.WriteLine(str);
      Console.WriteLine(sw.ElapsedMilliseconds);
      sw.Restart();
      var str2 = t.ParseNameSubstring(foo);
      sw.Stop();
      Console.WriteLine(str2);
      Console.WriteLine(sw.ElapsedMilliseconds);
    }

вывод:

foo bar
19
foo bar
0

Это правильное использование Span / ReadOnlySpan? Как кажется, он сильно замедляется (возможно, с помощью .AsSpan () и .ToString ())?

Неявное неявное приведение к строке недоступно в. NET Framework 4.7.2 или я пропустил пакет nuget?

обновление : действительно, неверный тест, но правильное ли это использование span?

update2 : краткое резюме :

  • Use. NET Core /. Net Standard, as. NET Framework имеет меньше оптимизаций.
  • Не использовать .ToString (), работать напрямую с ReadOnlySpan, где это возможно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...