может ли использование объектов в качестве ключей карты в dart иметь значительное влияние на производительность? - PullRequest
0 голосов
/ 07 апреля 2020

Написание некоторого кода в дротике Недавно я обнаружил случай, когда проще использовать определенные объекты в качестве ключей карты. На самом деле этот код выполняется в веб-режиме (скомпилирован в javascript), но в конечном итоге он будет использоваться и в режиме виртуальной машины dart.

Может ли использование объектов в качестве ключей карты оказать значительное влияние на память / производительность в дротике?

Я не нашел много ресурсов по бенчмаркингу (https://dart.dev/articles/benchmarking больше не существует), поэтому любые указания также приветствуются.

1 Ответ

2 голосов
/ 08 апреля 2020

Есть несколько соображений:

Память

Поскольку каждый объект, используемый в качестве ключей, будет ссылаться на карту, каждый объект не может быть собран мусором, если сам Map не может быть собран мусором или ключ был удален из Map. То же самое можно сказать и о связанном значении для каждого ключа.

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

Производительность

Производительность операций на Map очень сильно зависит от производительности Оператор == и свойство hashCode, так как оба используются для нескольких операций, используемых в Map.

Я могу порекомендовать прочитать о них здесь:

https://api.dart.dev/stable/2.7.2/dart-core/Object/operator_equals.html

https://api.dart.dev/stable/2.7.2/dart-core/Object/hashCode.html

Заключение

Многие проекты используют пользовательские объекты в качестве ключей для Карт, и обычно проблем не возникает во время этого. На самом деле использование пользовательского объекта ничем не отличается от использования, например, String в качестве ключа, поскольку String также являются обычным классом с собственным оператором == и свойством hashCode.

...