I’ll just chime in here on a slightly defensive note to say my rig does have its slow moments but I think it’s mainly due to the trackview. Creating keys using the key button and/or dopesheet is very fast but with the curve editor is very slow.
The way max seems to work with its rigs is that when you scrub the time slider, the connections are cached to facilitate smooth scrubbing of your animation. However, when you adjust the keyframe values in the trackview, the calculations are performed from scratch again and again for each new value. It feels like there are some major inefficiencies going on when you can adjust the position of the waist of the rig in the viewport in real-time, but moving those position keys in the curve editor chugs.
The way maya works with its rigs is that calculations are all made when scrubbing, transforming and when adjusting key values but the connections move through a more straightforward hierarchy of connections (when made well) making it quicker to calculate.
The result is that in maya, if you have a complex rig, how fast it is to scrub is how fast it will to be to manipulate across the board. While in max, for a complex rig you’ll always have quick scrubbing playback but adjusting keys in the curve editor will be painfully slow.
This is all of course without adding on extra mesh deformation things like skin modifiers, skin wraps, skin morphs, etc. Keeping your scene poly counts low for animation is a basic must, but also keeping your mesh deformations simple and/or being able to be turn them off when you don’t need them is important.
Regarding that last line, archanex’s point about deleting the skin modifier is an issue that’s annoyed me for years. Skinning a character slows down a rig, but if you hide that character, the skinning is still calculated and even if you turn the skin modifier off, it’s still calculated! This is unlike maya where if the skinned character is hidden, the playback speed is increased.
Max has some great rigging options but is constantly let down by its slow animation handling. The example I use is: create 100 point helpers, put some position animation on them, open up the trackview in curve editor mode, move all their keys around with interactive update turned on and it’ll chug. Do the same thing in maya with 100 locators and it’s real-time.
P.S. Paul’s point about avoiding the reaction manager and using wiring and/or instanced controllers is bang on the money.