Create ProfilingCache
Use Session model instead of KeyValuePair
Move listener to ProfilingCache
Move more logic from ViewModel to ProfilingCache