Почему System.Memory зависит от System.Numerics.Vectors в. Net 4.6.1, но не в. Net 4.6? - PullRequest
2 голосов
/ 04 августа 2020

Это зависимости пакета Nuget System.Memory. Мы используем более старые версии фреймворка. Net, и я заметил, что если я использую 4.6.1, существует дополнительная зависимость от System.Numerics.Vectors (я думаю, фреймворка DLL), которая не нужна в 4.5-> 4.6.

Кажется противоположным нормальному, что более новая версия. Net потребует больше зависимостей.

Почему это так, и увижу ли я разницу, например, в производительности?

Дополнительные зависимости

1 Ответ

1 голос
/ 05 августа 2020

Кажется противоположным нормальному, что более новая версия. Net потребует большего количества зависимостей.

Пакет System.Memory содержит библиотеки для следующих целевых платформ.

  • . NET Framework 4.6.1
  • . NET Стандарт 2.1
  • . NET Стандарт 2.0
  • . NET Стандарт 1.1

. NET Framework 4.5

При использовании пакета в проекте. NET Framework 4.5 System.Memory.dll из . NET Используется стандартная цель 1.1 , потому что это самая высокая версия, которую он может использовать, см. Эту ссылку . Однако эта версия не использует Vector<T> или другие векторные типы. Следовательно, это не зависит от System.Numerics.Vectors.

. NET Framework 4.6

То же, что и для. NET Framework 4.5, поскольку . NET Standard 1.3 - это самая высокая версия, которую может использовать проект. NET Framework 4.6. Поскольку предоставляется только версия. NET Standard 1.1, она вернется к ней.

. NET Framework 4.6.1

При использовании пакета в. NET Проект Framework 4.6.1, используется соответствующая версия System.Memory.dll. В этой версии используется тип Vector<T>, который доступен только в:

  • . NET Core> = 1.0
  • . NET Standard> = 2.1 Предварительный просмотр
  • Пакет System.Numerics.Vectors NuGet

Целевой объект. NET Framework 4.6.1 имеет зависимость от пакета System.Numerics.Vectors, поскольку в противном случае он был бы недоступен .

[...] увижу ли я какую-либо разницу, например, в производительности?

Возможно повышение производительности, поскольку Vector<T> - это SIMD -ускоренный тип . Он используется во вспомогательном классе для промежутков, где проверяется Vector.IsHardwareAccelerated, поэтому я предполагаю, что есть причина, связанная с производительностью, за использованием Vector<T>.

Bonus Round

Почему этот пакет даже имеет отдельную цель. NET Framework 4.6.1, если он может использовать. NET Стандартный? Это лучше всего объясняется в самой связанной ссылке.

[...] Хотя NuGet считает. NET Framework 4.6.1 поддерживающей. NET Стандартные 1.5–2.0, есть несколько проблем с потреблением. NET Стандартные библиотеки, которые были созданы для этих версий из проектов. NET Framework 4.6.1. [...]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...