I disagree whole-heartedly. Understanding how memory works and is laid out in a C# program is outrageously complicated for someone just starting out in the language, and since the language goes to so much effort to shield you from it, that sounds like a baffling way to start.
C# is about algorithms, not about performance, memory or anything else.
And optimising your programs for memory or performance before you even properly understand the language is a recipe for disaster; a little knowledge often is worse than none at all when it comes to these things (for instance, if he decides to pinvoke to "strlen" because "pinvokes are faster than managed code" he'll be in for a nasty surprise).
We have a kind of paradoxical thing when it comes to modern programming....
on one hand a good understanding of the background and of the low level operations and methods can help a skilled developer create a superior codebase.
on the other hand we have environments / runtimes and such that allow a developer to often not even think about much of the low level stuff and still do a fair job.
Back when all we really had was C and Macro Assembler for most of the work every developer had to know a lot more of the lower level stuff to just write decent programs.
Today a smaller number of deeply skilled developers seem to be needed to build the abstracted frameworks that many can build on top of.
But at some point that deeper level can come in handy .... as long as you learn where and when to apply it.