Ever since COM made its debut in 1993, programmers have searched for ways to optimize the performance of COM method calls. Their never-ending quest for speed has produced a number of clever solutions, some as extreme as using custom marshaling to replace COM's built-in remoting infrastructure with remoting mechanisms of their own. But no technique is as effective at speeding the execution of cross-process and cross-machine method calls as preventing those method calls from leaving the caller's process in the first place.