Historically (and I do mean "a long time ago") we did this with Memory Mapped Files (
Search CodeProject[
^]) and also with Named Pipes (
Search CodeProject[
^]). You could also do it with Sockets (
Search CodeProject[
^]) - I haven't personally done that.
"Best" is an objective word - do the research (see the links) and you decide which method is best for what you are trying to do