After every ride in the wet, otherwise every week or two. I do a complete wash - spray with TruckWash, clean with a soft brush (3" paintbrush), clean wheel hubs and rims with a toothbrush, douse with a soluble wax cleaner (car wax), then blow dry with compressed air. The chain and rear cluster come off and are cleaned in kero, blown dry, oiled with a teflon based oil, and the idler bushes are greased. When thoroughly dry all moving parts are oiled including cables (using a cable oiler) and any minor adjustments are made (to account for cable stretch etc.). About once a month the wheel bearings are repacked too.
Got the cleaning down to under an hour and bearings to about 20min. It's worth the trouble - the bike runs like a Swiss watch after this.