Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Парсинг текстового файла без напряга для GC и без unsafe (8 стр)

Парсинг текстового файла без напряга для GC и без unsafe (8 стр)

Страницы: 17 8 9 1016 Следующая »
AslanПостоялецwww9 мар. 201813:27#105
*Lain*
tokens тоже ненужен, если уж оптимизируешь
boolУчастникwww9 мар. 201813:49#106
Daniil Petrov
> bool
> Ну это если твои познания ограничены только программированием. А вообще писать
> программы под заказ, судя по всему, самое неблагодарное дело, я за него никогда
> не брался и браться не стану.
Иногда бывает и так, что неблагодарное, да. Но кто-то ведь и программистом работать должен. Так-то и водителем/машинистом/лётчиком работать - тоже не очень благодарное дело, потому я никогда не работал в такси. Но это не значит, что никто не должен это делать.

Правка: 9 мар. 2018 13:52

AslanПостоялецwww9 мар. 201814:05#107
Daniil Petrov
> вернулся к написанию своего движка
Есть тема про твой движок?
> А вообще писать программы под заказ, судя по всему, самое неблагодарное дело, я за него никогда не брался и браться не стану
А зарабатываешь не программированием?
*Lain*Постоялецwww9 мар. 201814:17#108
Aslan
> tokens тоже ненужен, если уж оптимизируешь
ну да. DOM не нужен. Нужен SAX
MrShoorУчастникwww9 мар. 201821:31#109
*Lain*
> пф... не нужны никакие ареи и дополнительные нагрузки на гц
А потом захочется 2 прохода, чтобы не аллоцировать по 5 раз вертекс арреи... Не, не убедил, я предпочитаю одно копирование с одной дополнительной аллокацией на GC.
alexzzzzПостоялецwww9 мар. 201822:54#110
В рамках изучения Span<T>, Memory<T>, Utf8Parser и ArrayPool<T> решил сделать свой парсер. Распарсить obj без аллокаций оказалось проще, чем привести то описание модели, которое хранится в obj, к готовому для передачи в Unity виду. В одном obj файле может быть много объектов: с текстурами и без, с нормалями и без. Их даже в один mesh не сконвертируешь и submeshes не помогут.

Тестировал на файлике "Residential Buildings 008.obj" отсюда. Аллокация 512 байт в табличке ― это чтение файла.

// * Summary *

BenchmarkDotNet=v0.10.13, OS=Windows 10.0.17618
Intel Core i5-2500K CPU 3.30GHz (Sandy Bridge), 1 CPU, 4 logical cores and 4 physical cores
Frequency=3232152 Hz, Resolution=309.3914 ns, Timer=TSC
  [Host] : .NET Framework 4.6 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3053.0
  Clr    : .NET Framework 4.6 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3053.0
  Mono   : Mono 5.10.0 (Visual Studio), 64bit


              Method |  Job | Runtime |     Mean |     Error |    StdDev | Allocated |
-------------------- |----- |-------- |---------:|----------:|----------:|----------:|
 'Import Span<byte>' |  Clr |     Clr | 16.44 ms | 0.0936 ms | 0.0875 ms |       0 B |
       'Import file' |  Clr |     Clr | 16.60 ms | 0.0841 ms | 0.0786 ms |     512 B |
 'Import Span<byte>' | Mono |    Mono | 28.43 ms | 0.1474 ms | 0.1379 ms |       N/A |
       'Import file' | Mono |    Mono | 29.04 ms | 0.1420 ms | 0.1259 ms |       N/A |

// * Legends *
  Mean      : Arithmetic mean of all measurements
  Error     : Half of 99.9% confidence interval
  StdDev    : Standard deviation of all measurements
  Allocated : Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)
  1 ms      : 1 Millisecond (0.001 sec)
+ ObjImporter.cs
+ ObjModel.cs

C# 7.2. ObjModel написан абы как не думая, лишь бы работало.

Правка: 9 мар. 2018 23:22

Polyflow3dПостоялецwww10 мар. 20188:11#111
alexzzzz 
Распарсить obj без аллокаций оказалось проще, чем привести то описание модели, которое хранится в obj, к готовому для передачи в Unity виду. В одном obj файле может быть много объектов: с текстурами и без, с нормалями и без. Их даже в один mesh не сконвертируешь и submeshes не помогут.

совершенно верно. Главное не прочесть, а понять.
Если запутаешся, обращайся, я с этим обжем давно работаю.
Например могу сразу посоветывать нормали игнорировать,но считать самому.

Вообще б твои усилия - да б в мирное русло -
Есть потребность переписать на c# alembic импортер из c++.
И вот это уже будет коммерчески интересно для ассет стора.

u960Постоялецwww10 мар. 20189:41#112
Polyflow3d
> Распарсить obj без аллокаций оказалось проще
что это значит
DampireУчастникwww10 мар. 201811:36#113
MrShoor
> Это всего лишь 2 аллокации на весь парсинг файла.
Это к твоему "структуры всегда аллоцируются на стеке", то что ололокаций у тебя мало и так ясно.
DimichПостоялецwww10 мар. 201813:26#114
А gc тормозит всё, не важно, в каком потоке был парсинг? Я просто не в курсе.
seamanПостоялецwww10 мар. 201813:45#115
Polyflow3d
> переписать на c# alembic импортер из c++.
https://github.com/unity3d-jp/AlembicImporter
alexzzzzПостоялецwww10 мар. 201813:54#116
u960
> > Распарсить obj без аллокаций оказалось проще
> что это значит?

Что в процессе парсинга содержимого obj-файла в управляемой куче не создаётся объектов вообще.

Polyflow3d
> Например могу сразу посоветывать нормали игнорировать, но считать самому.

Если делать импорт obj для своих утилитарных целей, то может и нормально, а если предполагается, что пользователи будут загружать в рантайме произвольные модели, то надо импортировать как есть.

seaman
> https://github.com/unity3d-jp/AlembicImporter

Там присутствуют какие-то подозрительные h и cpp.

Правка: 10 мар. 2018 13:54

seamanПостоялецwww10 мар. 201814:04#117
alexzzzz
> Там присутствуют какие-то подозрительные h и cpp.
Да, похоже сосбственно импортер написан на плюсах, а на шарпе обертка...
Polyflow3dПостоялецwww10 мар. 201817:01#118
alexzzzz
Если делать импорт obj для своих утилитарных целей, то может и нормально, а если предполагается, что пользователи будут загружать в рантайме произвольные модели, то надо импортировать как есть.

почему?

MrShoorУчастникwww10 мар. 201822:10#119
Dampire
> Это к твоему "структуры всегда аллоцируются на стеке"
Но ведь так и есть. Когда ты используешь массивы и List-ы, то аллоцируются не структуры, а массивы, в которые ты потом копируешь эти структуры.
Страницы: 17 8 9 1016 Следующая »

/ Форум / Программирование игр / Общее

2001—2018 © GameDev.ru — Разработка игр