It took me quite sometime, but I found the answer!
ContextBoundObject inherits from MarshalByRefObject.
This object - when passed between 2 AppDomains (or processes for that
matter),
Will create a dynamic proxy for the object, which means that all the
data "inside" this obejct is never serialized\deserialized since it
never really leaves its appDomain!
The good thing is you get better performance and better scalability for
the objects hold inside the MarshalByRef-ed object - since they dont
need to worry about serialization,
And are called only on demand (kinda like lazy-load)
The bad thing is that every call to a property or a method to this
object will result in a remoting "conversation" EVEN IF IT'S IN THE
SAME PROCESS!, and it's also makes the consumer more connected to the
marshaled object!
Hope this will shed some light for some of you - it did for me
--sternr