For most of the instances I will probably never populate this field with any value.
Then for most instances it will be 4 bytes for the null reference. 8 on 64-bit if you ever adapt it beyond the 32-bit detail you mention in your answer.
How much memory does an empty dictionary take?
That's a different question, since here you seem to have populated it with an empty dictionary, which is not the same as not populating it. The size would vary according to library version but would be around 40 bytes.
Why do this though? If it's rarely used, then rarely set it. Only set it if it's going to be written to, otherwise leave it null, and let the code that looks to read it find a "not present" answer for null the same as it would for empty.
public void Add(string key, object value)
{
if (_dict == null)
{
_dict = new Dictionary<string, object>();
}
_dict.Add(key, value);
}
public bool TryGetValue(string key, out object value)
{
if (_dict != null)
{
return _dict.TryGetValue(key, out value);
}
value = null;
return false;
}