Skip to content

Add new dependency tracking strategy#31

Open
alekseytomin wants to merge 1 commit intomasterfrom
TrackingResource
Open

Add new dependency tracking strategy#31
alekseytomin wants to merge 1 commit intomasterfrom
TrackingResource

Conversation

@alekseytomin
Copy link
Copy Markdown
Contributor

@alekseytomin alekseytomin commented Jun 10, 2016

Идея в том, что "ресурс" на самом деле не является кэшем.
Т.е. от "ресурса" зависит что-то, но сам "ресурс" зависит только от значения.

Переведя все кэшированные сущностей значения на данный механизм мы полностью исключаем активную работу с THashSet - ресурс не зависит ни от кого, поэтому ни у кого не будут заливаться пачки ссылок на сущности.
Это позволит избавиться от "настоящих" кэшей в сущностях, но при этом не трогать ресурсы.

@klya
Copy link
Copy Markdown
Member

klya commented Jun 14, 2016

Чо?

@klya
Copy link
Copy Markdown
Member

klya commented Jun 14, 2016

Я не понял, что ты имеешь в виду.

@alekseytomin
Copy link
Copy Markdown
Contributor Author

Про идею.

При создании любого кэша добавляется минимум одна зависимость от самого класса.
Т.е. Entity1.getValue1() имеет зависимовть от класса Entity1.
При загрузке 1М экземпляров Entity1 в dependencyNodes у класса Entity1 добавляется 1М зависивых объектов. Когда сборщик мусора выкидывает экземпляры- dependencyNodes чистится.
При активной работе приложения список зависимостей пстоянно растёт/сжимается. После 30го пуллреквеста это не убивает приложение, но всё одно- радости от этого никакой.
Кстати, DependencyTracking для ResourceView всегда будет INSTANCE.
При том, что реально @ResourceView должен сбрасываться либо по удалению инстанса (это всегда есть), либо при изменении значения (работает MxResource.writeEnd) - нам не надо добавлять ссылку на кэш куда-либо.

Данная правка даёт возможность (но текущий код не меняется) не добавлять зависимость.
Я смотрел- после этого использования этого ни один dependencyNodes не содержит более 1000 (или даже 100? Забыл) элементов (вместо сотен тысяч).

@klya
Copy link
Copy Markdown
Member

klya commented Jun 14, 2016

Какая-то каша.
Зависимость от класса добавляется потому, что в кеше есть возможность чистить кэши по классу. Эта фича нами не используется, но я не вижу в ней сосредоточения зла. Большие хеш сеты я злом не считаю.
@ResourceView вообще не имеет отношения к MxResource. И всё что ты написал по этому поводу я не понял. Разверни свою мысль.

@klya
Copy link
Copy Markdown
Member

klya commented Jun 14, 2016

То что в DependencyNode вдруг стало мало элементов -- это скорее свидетельство ошибки. Если там есть зависимость, но она не тречится -- это ошибка.

@alekseytomin
Copy link
Copy Markdown
Contributor Author

Зачем тречить зависивость, которая не используется? Хотя может это и мало экономит, но движуху уменьшает (добавить, удалить, сжать).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants