LeoECS - важные изменения, снова
Новая 20180722
версия LeoECS фреймворка была выпущена и пришло время поломать что-нибудь снова. :)
Изменения
- Пространство имен было изменено с
LeopotamGroup.Ecs
наLeopotam.Ecs
- стало короче и теперь отражает досновное доменное имя. - Все marshal-by-reference (классы за исключением строк) поля компонентов будут автоматически проверяться на зануление при удалении компонента с сущности.
Это позволит обнаруживать потенциальные утечки памяти и исправлять их. Если вы уверены, что поле не должно быть занулено (например, заранее созданные коллекции) при удалении, можно использовать атрибут[EcsIgnoreNullCheck]
на этом поле для пропуска подобной проверки.Пример с утечкой памяти:
1
2
3
4
5
6
7
8
9
10class Data { }
class Component2 {
public Data Data;
}
...
Component2 c;
var entity = world.CreateEntityWith<Component2>(out c);
c.Data = new Data();
world.RemoveComponent<Component2>(entity);Будет показано исключение с сообщением:
Memory leak for “Component2” component: “Data” field not nulled. If you are sure that it’s not - mark field with [EcsIgnoreNullCheck] attribute
Пример без утечки памяти:
1
2
3
4
5
6
7
8
9
10
11
12class Data { }
class Component2 {
// Preinited field and we want to keep it not nulled.
[ ]
public Data Data = new Data();
}
...
Component2 c;
var entity = world.CreateEntityWith<Component2>(out c);
c.Data = new Data();
world.RemoveComponent<Component2>(entity);Исключения в данном случае не будет.
Оформить подписку можно здесь: