c# – Speeding up map rendering

My map loading and rendering process is slow when using very large maps, so I’m looking for ways to make it more efficient.

My current solution works like this:

The issue is simply slow rendering due this for loop in my OpenGL rendering code used for calling objects by checking values on arrays. It becomes slow with big objects. How can I make this faster?

I use different map loaders one for networking (receiving player object sending info). Here’s one for loading maps:

      void MapLoad(string filelocation)
      {

            string() map_;
            
            string line = File.ReadAllText(filelocation);//
            map_ = line.Split(new char() { ',', ';', '(', ')' }, StringSplitOptions.RemoveEmptyEntries);


            for (int xj = 0; xj < map_.Length; xj += 5)
            {
                // Here xj is an index of a X coordinate, xj + 1 is an index of a Y coordinate, xj + 2 is an index of a Z coordinate

    //object for storing the data
                    Block_ chunk_block = new Block_();
    //coordinates set
                    chunk_block.set_v1(new Vector3(Int32.Parse(map_(xj)), Int32.Parse(map_(xj + 1)), Int32.Parse(map_(xj + 2))));
    //material set
                    chunk_block.set_v1_material(Int32.Parse(map_(xj + 3)));//1
    //block type set 
                    chunk_block.set_v1_blocktype(Int32.Parse(map_(xj + 4)));
                    chunk_block.set_v1_scale(new Vector3(1, 1, 1));
                    stuff__.block_file.Add(chunk_block);
                    stuff__.collision.Add(chunk_block.get_v1());
               
            }

        }

    //version for position
    void MapLoad(string filelocation,Vector3 position)
    {
    
            string() map_;
            
            string line = File.ReadAllText(filelocation);//
            map_ = line.Split(new char() { ',', ';', '(', ')' }, StringSplitOptions.RemoveEmptyEntries);
    
            
            for (int xj = 0; xj < map_.Length; xj += 5)
            {
                // Here xj is an index of a X coordinate, xj + 1 is an index of a Y coordinate, xj + 2 is an index of a Z coordinate
    
                Block_ chunk_block = new Block_();
    //position
                chunk_block.set_v1(new Vector3(Int32.Parse(map_(xj))+position.X, Int32.Parse(map_(xj + 1)) + position.Y, Int32.Parse(map_(xj + 2)) + position.Z));
    //mat
                chunk_block.set_v1_material(Int32.Parse(map_(xj + 3)));//1
    //blocktype
                chunk_block.set_v1_blocktype(Int32.Parse(map_(xj + 4)));
                chunk_block.set_v1_scale(new Vector3(1, 1, 1));
                stuff__.block_file.Add(chunk_block);
                stuff__.collision.Add(new Vector3(chunk_block.get_v1().X, chunk_block.get_v1().Y+1, chunk_block.get_v1().Z));
                
            }
    
        }

And here is my rendering loop:

for (int i = 0; i < stuff__.block_file.Count; i++)
{
        //block data given to block model object that takes material for textures etc but thats not about problem
        block(new Vector3(stuff__.block_file(i).get_v1().X, stuff__.block_file(i).get_v1().Y-2 + walking__, stuff__.block_file(i).get_v1().Z), stuff__.block_file(i), BeginMode.Quads, stuff__.block_file(i).get_v1_scale());        
}