Massive lag moving platforms

The following code powers my moving platforms. However, if there are more than 3 or so, I start to experience massive lag. As in 3 FPS lag. This seems really excessive for what I’m doing. Ideas on streamlining this? Am I doing something that really chews memory?

EDIT: I have tracked the problem down to the lines of code that scale the piston. Is scaling every frame really slow or something?

var Top : GameObject;
var Piston : Transform;
var Sound : AudioSource;
var HeightToLift : float;
var Speed : float;
var usingButton : boolean;
var linkedButton : ButtonControl;

function FixedUpdate () {
	if (Top.transform.localPosition.y > HeightToLift || Top.transform.localPosition.y < 0) { // Flip direction @ ends
		Speed *= -1;
	}
			
	if (usingButton == true) {
		if (linkedButton.buttonPressed) {
			Top.rigidbody.MovePosition(Top.rigidbody.position+(transform.up * Time.deltaTime * Speed * 3));
			Piston.localScale.z += Time.deltaTime * Speed; //THIS LINE
			if (Sound.isPlaying == false) {
				Sound.Play();
			}
		} else if (Sound.isPlaying == true) {
			Sound.Stop();
		}
	} else {
		Top.rigidbody.MovePosition(Top.rigidbody.position+(transform.up * Time.deltaTime * Speed * 3));
		Piston.localScale.z += Time.deltaTime * Speed; // AND THIS LINE
		if (Sound.isPlaying == false) {
			Sound.Play();
		}
	}
}

Do you by error use a mesh collider?
If so ensure its selected to be convex, you must never move mesh colliders that are not convex as the whole collision tree gets constantly updated and thats an extremely cpu intense work, if you get close to detailed meshes or the terrain it can even become a neck breaking bottleneck.

If a single collider can’t represent a more complex shape that would not be able to work with convex mesh collider, use subobjects that only have a collider on them (normally primitive) and try to represent it that way. or rework the model to visually represent what you physically need for it to have it working reasonably.