Infinite Road Clone Duplication

I am making an infinite driving game and created a script to create road forward as the current road is seen. For some reason the roads keep duplicating underneath themselves as well as forward and this crashes the game after only a few minutes, any help you can provide would be much appreciated.
public GameObject road;

    void OnBecameInvisible()
    {
        Destroy(gameObject);
    }

    void OnBecameVisible()
    {
        GameObject e = Instantiate(road, transform.position + transform.up * 15, transform.rotation) as GameObject;
    }

I don’t use the OnBecameVisible alot, but I don’t know if it accounts for culling. In some cases your camera renders things that are in your FOV but are being occluded. Perhap’s onBecameVisible works the same.

If Culling is not working then you will be instantiating every single frame overloading your game with objects.

I would recommend a different approach entirely. Find out which piece of road you are on and calculate 10 pieces ahead. You can use OnTriggerExit to see when you’ve driven passed a piece, use an array to keep track of how many pieces you have at any given point. and only instantiate new pieces when the Array.Length < 10

Also I dont fully understand your displacement method of spawning in new pieces of road, all I can tell you is that a new piece should be spawned centred to the end of the previous road, with the correct offset rotation if the road curves.