ASP NET Как хранить данные внутри приложения?
У приложения есть события запуска и завершения работы.
Общие данные можно загружать при запуске приложения (Application_Start) или подгружать в статические классы в процессе работы приложения. Либо использовать HttpApplication, хотя смысла в этом особого нет.
Важную информацию можно сохранить при завершении работы приложения (Application_End) в любое удобное хранилище (базы данных, файлы). Если данные очень важны, то лучше их периодически сохранять в процессе работы приложения (сделать таймер при инициализации приложения), т.к. рабочий процесс может быть завершен некорректно и  событие Application_End может не возникнуть. Также следует учитывать вероятность неожиданного завершения работы приложения в момент сохранения важных данных (например, если рабочий процесс будет убит).
Временные данные можно хранить в кэше. 
Небольшие объемы данных можно хранить в переменных, но лучше постараться держать такие данные в одном месте и не размазывать по всему приложению. Например, использование для этих целей классов контроллеров - не лучшая идея.
ASP.NET обычно state less - не хранит состояний. Приложение может быть остановлено/запущено в любой момент (например IISом) и все статические переменные потеряют свои значения. Если нужно именно хранение (persistence)  то на выбор: файлы, базы данных, внешние кэши и т.д.
Счетчики правильнее хранить во внешнем кэше (например в redis).