Track assets loaded inside the game

I am trying to track the memory allocated for every resource that is being loaded inside the game. For example, say I have ten meshes. Two of them used by the player. Five used by AI characters, and remaining used by environment. Now I want to differentiate these ten meshes into three different categories based on whoever is using them. I know how much memory is being allocated when their constructor is being called (and because of the constructor, I know which mesh is used by which class). But the meshes are loaded later using FLinkerLoad. At this point, I am not able to track which mesh is being used by whom. I have the Mesh pointer (when Character class constructor creates it), now how to track the memory it further loads while loading the asset?

Asset Registry provides some events for that

https://api.unrealengine.com/INT/API/Runtime/AssetRegistry/FAssetRegistryModule/index.html

https://api.unrealengine.com/INT/API/Runtime/AssetRegistry/IAssetRegistry/index.html

More precisely OnInMemoryAsset events

I have a few questions on this:

  1. What is the difference between FAssetAddedEvent and FInMemoryAssetCreatedEvent?
  2. Also, isn’t AssetRegistry just for editor builds? I want something like this for non-editor builds.
  3. Suppose this method works, and I have a callback for OnAssetAdded. But how do I identify that this asset is being used by this class? And how do I query how much memory is it using?

i also have the similar question, when the asset pointed by hard pointer was loaded in a packaged game?