Я не верю, что есть какой-либо API, который даст вам истинный размер объекта, но его можно определить, измеряя объем памяти, используемый до и после создания объекта; однако это не очень безопасно для потоков.
Вы можете использовать System.Runtime.InteropServices.Marshal.SizeOf(), хотя это не даст вам точный размер, это даст вам точную точку сравнения, чтобы вы могли сказать что-то вроде: если размер объекта увеличивается на X%, а затем удаляет Y количество элементов.
Кроме того, вы можете попытаться сохранить общее количество, но если элементы в коллекции доступны для редактирования, вам нужно будет убедиться, что каждое добавление, удаление и редактирование включены в расчет. Вам по-прежнему остается проблема правильного измерения добавляемых и удаляемых элементов, и, как указано выше, я не верю, что есть API, который сделает это точно.
Почему бы не использовать кеш asp.net? он работает без какого-либо http-контекста и имеет функцию, которую вы просите ... (http://www.hanselman.com/blog/UsingTheASPNETCacheOutsideOfASPNET.aspx) –