作者:吴小含
导语 :Unity中频繁的垃圾回收往往是造成手游性能瓶颈的一大元凶,本文对常见的造成频繁垃圾回收的原因做一个扫描,让开发者在日常开发中可以有意识的避开这些问题。
比如有100个对象存在一个List里,那GC的次数就是101次(List本身占一次)
class Foo
{
int a;
float b;
bool c;
string str;
}
但是如果将它们的属性进行拆分,将所有值属性放到一个struct里,如:
struct Foo_S
{
int a;
float b;
bool c;
}
Foo_S[] fooArray;
string[] strArray;
那这100个对象的GC次数就会降低为2次
this.comparer = comparer ?? EqualityComparer<TKey>.Default;
而 EqualityComparer 的内部有私有方法 CreateComparer() 来创建真实的 Comparer,内建类型(int/float 等等)已经实现了良好的 Equality 判断,而用户定义的 struct 则没有,每次调用 Add / ContainsKey / TryGetValue 等接口时,EqualityComparer 会为你创建一个Comparer。
要避免这一问题,可以人为指定对象的Comparer 或者对你的自建struct实现Equals() 和 GetHashCode() 等方法。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。