What's been working for me is to run two chains and keep swapping between them. When one is dirty beyond the ability of a rag to clean it (about 100- 150 on limestone trails), I remove it and soak it in Dawn dishwasher detergent and water -- swishing occasionally -- and keep changing the solution until the water is no longer dirty. Occasionally I will also soak it in Acetone if it is really dirty. Frequently I have to let it soak overnight or longer before it is clean.
In the meantime, I clean the derailleur pulleys, cassette and cranks and then mount the second, clean chain so I don't miss any riding time while the dirty chain is soaking.
I like this method because it eliminates most of the elbow grease and it is the only way I know of to get the dirt out of the inside of the chain. I doubt it removes all of the dirt -- but probably more of it than any other method I have heard of...