dynamic load large source

hello,i want load a large terrain when the unity3d game is running.
i have used the StartCoroutine fuction to do this thing, but when i using the resource.load(),the game was almost stoped as the FPS was been down to just 10. (the codes is attach follow).I want to kown hao can i do to avoid the situation?
is unity3d can do dynamic loading in background not effect my game FPS?

i have alse try to start another thread in CSharp script,but i can’t create object in the thread.
thanks in advance!

StartCoroutine(dymicTerrain());
IEnumerator dymicTerrain()
{
tslip.pos = new Vector3(x * 2000 * 1.0f, 0, z * 2000 * 1.0f);
tslip.obj = Resources.Load(“Prefeb/TerrainFeb_” + z.ToString() + “_” + x.ToString(), typeof(Object));
tslip.obj = Object.Instantiate(tslip.obj, tslip.pos, m_Quat);

}

The reason this is happening is the coroutine runs at a point in the main loop. The unity engine runs the update code and so on then runs any coroutine code. It is not running it in the “background” or swapping out threads as it appears you assume it is.

So basically if a coroutine has something that blocks, it will block the entire gameloop. That is why the yields exist, this stops the processing in the coroutine and returns it to the main loop, but picks up from that point in the next game loop.

There are other functions that do this, AssetBundle.LoadAsync(), Application.LoadLevelAsync() but they work slightly different than the resources.load().

Application.LoadLevelAdditiveAsync() is another one but that is a Pro only function.