Страница 1 из 1

NativeArray и с чем его едят.

СообщениеДобавлено: 09 окт 2019, 17:11
Axil
А могу я хранить всегда свои данные в NativeArray? Изменять их и когда нужно - отправлять сразу в другой поток для обработки.
Его можно создать с Allocator.Persistent тогда не нужно будет делать Dispose в том-же кадре. Хочу сэкономить на копировании.
Или это извращение? Обращение к NativeArray дольше или быстрее чем к С# array?

PS: Вроде-бы фигня скопировать byte[16,16,16] в NativeArray, а жрёт 0,2 - 0,3 ms, как-то дофига для копирования.

Re: NativeArray и с чем его едят.

СообщениеДобавлено: 09 окт 2019, 20:14
Axil
Из-за того что NativeArray нужно будет хранить "вечно", он Allocator.Persistent, а это значит что он совсем не обязательно лежит в одном куске памяти последовательно и его индексация будет работать медленнее. Так что никакого выигрыша из-за отсутствия копирования может и не быть и даже наоборот.
Дилемма... :-\
А вы как думаете?

Re: NativeArray и с чем его едят.

СообщениеДобавлено: 10 окт 2019, 01:48
Cr0c
A NativeArray exposes a buffer of native memory to managed code

Причём тут поток, когда это для обхода маршаллинга?

Re: NativeArray и с чем его едят.

СообщениеДобавлено: 10 окт 2019, 01:55
Axil
Cr0c писал(а):
A NativeArray exposes a buffer of native memory to managed code

Причём тут поток, когда это для обхода маршаллинга?


Не только, вот:
A NativeContainer is a managed value type that provides a relatively safe C# wrapper for native memory. It contains a pointer to an unmanaged allocation. When used with the Unity C# Job System, a NativeContainer allows a job to access data shared with the main thread rather than working with a copy.
https://docs.unity3d.com/Manual/JobSyst ... ainer.html