Spawning Bug.

Okay I have a game which involves spawning. My spawn points are both left and right. I have this wave that spawns once “delay” is completed. I am spawning moving object that does get destroyed. (which I am trying to do) At first it seems nice, no problems but after a few minutes (2 mins) it suddenly starts spawn 1000 upon 1000’s of my moving objects. How would I stop this!!! I think it may be because I haven’t got a destroy script, to destroy the moving objects, but I’m no genius! Please if anyone can help it would be much appreciated. Thank you!!!
Here’s my script:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

 [System.Serializable]
 public class WaveAction
 {
 public string name;
 public float delay;
 public Transform prefab;
 public int spawnCount;
 public string message;
   }

 [System.Serializable]
 public class Wave
 {
 public string name;
 public List<WaveAction> actions;
  }

 public class WaveGenerator : MonoBehaviour
 {
  public float difficultyFactor = 0.9f;
  public List<Wave> waves;
  private Wave m_CurrentWave;
  public Wave CurrentWave { get {return m_CurrentWave;} }
  private float m_DelayFactor = 1.0f;
  public GameObject ObjectToSpawn; 

  IEnumerator SpawnLoop()
  {
	 m_DelayFactor = 1.0f;
	 while(true)
	 {
		 foreach(Wave W in waves)
		 {
			m_CurrentWave = W;
			foreach(WaveAction A in W.actions)
			{
				if(A.delay > 0)
					yield return new WaitForSeconds(A.delay * m_DelayFactor);
				if (A.message != "")
				{
					// TODO: print ingame message
				}
				if (A.prefab != null && A.spawnCount > 0)
				{
					for(int i = 0; i < A.spawnCount; i++)
					{
						
						// Random position within this transform
						Vector3 rndPosWithin;
						rndPosWithin = new Vector3(Random.Range(-1f, 1f), Random.Range(-1f, 1f), Random.Range(-1f, 1f));
						rndPosWithin = transform.TransformPoint(rndPosWithin * .5f);
						Instantiate(ObjectToSpawn, rndPosWithin, transform.rotation);  
						
					}
				}
			}
			yield return null;  // prevents crash if all delays are 0
		}
		m_DelayFactor *= difficultyFactor;
		yield return null;  // prevents crash if all delays are 0
	}
}
void Start()
{
	StartCoroutine(SpawnLoop());
}

}

Ok looks like i know what is wrong: look at this line “m_DelayFactor *= difficultyFactor;” you multiply initial delay (1.0f) with difficculty factor (0.9), each “round” your delay becomes lower and lower with more speed because you multiply by less then 1. So problem in calculation of delay lowering.