HUD lagging my game

I lag alot with this hud

[lua]

function hud()
local ourMat = Material( “icon16/heart.png” )
local ourMat2 = Material( “icon16/shield.png” )
local ourMat3 = Material(“icon16/lightning.png”)
local ourMat4 = Material(“icon16/money.png”)
local ourMat5 = Material(“icon16/user_go.png”)
local ourMat6 = Material(“icon16/bomb.png”)
local health = LocalPlayer():Health() or 0
local armor = LocalPlayer():Armor() or 0
local wep = LocalPlayer():GetActiveWeapon( )
local alv = LocalPlayer():Alive()
local stm = CL_GetEnergy()
local money = LocalPlayer():getChar():getMoney()
local speed = LocalPlayer():GetRunSpeed()
local Money = client.Wallet or 0

//the hud background

draw.RoundedBox(15,82,ScrH() - 222,420,138,Color(250,250,250))
surface.SetDrawColor( 255, 255, 255, 255 )

draw.RoundedBox(15,40,ScrH() - 220,460,135,Color(0,128,0))
	surface.SetDrawColor( 255, 255, 255, 255 )

	

//icons

	

	

	
	

//Borders

	draw.RoundedBox( 0, 125, ScrH() - 110, 375, 2, Color(250, 250, 250) )
	draw.RoundedBox( 0, 125, ScrH() - 200, 375, 2, Color(250, 250, 250) )


//text
draw.DrawText( wep, "mlg", 250, ScrH() - 173, Color( 250, 250, 250, 250 ), TEXT_ALIGN_CENTER )
draw.DrawText( "5000000", "mlg", 250, ScrH() - 163, Color( 250, 250, 250, 250 ), TEXT_ALIGN_CENTER )


	
	
	
	//border around person
		surface.DrawCircle( 70, ScrH() - 152, 70, Color(250, 250, 250) ) 
		surface.DrawCircle( 70, ScrH() - 152, 70.1, Color(250, 250, 250) ) 
		surface.DrawCircle( 70, ScrH() - 152, 70.2, Color(250, 250, 250) ) 
		surface.DrawCircle( 70, ScrH() - 152, 70.3, Color(250, 250, 250) ) 
		surface.DrawCircle( 70, ScrH() - 152, 70.4, Color(250, 250, 250) ) 
		surface.DrawCircle( 70, ScrH() - 152, 70.5, Color(250, 250, 250) ) 
		surface.DrawCircle( 70, ScrH() - 152, 70.6, Color(250, 250, 250) ) 
		surface.DrawCircle( 70, ScrH() - 152, 70.7, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 70.8, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 70.9, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 71, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 71.1, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 71.2, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 71.3, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 71.4, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 71.5, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 71.6, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 71.7, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 71.8, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 71.9, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 72, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 72.1, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 72.2, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 72.3, Color(250, 250, 250) )
		surface.DrawCircle( 70, ScrH() - 152, 72.4, Color(250, 250, 250) )
		//health
		
		draw.RoundedBox( 3, 143 , ScrH() -  130, 105, 15, Color( 0, 168, 0, 250 ) )
		draw.RoundedBox( 3, 144 , ScrH() -  129, 103, 13, Color( 255, 255, 255, 250 ) )
		
		if health > 0 then
		draw.RoundedBox( 3, 143 , ScrH() -  130,5 + health, 15, Color( 0, 168, 0, 250 ) )
		end
		
		
		
		// armor
	draw.RoundedBox( 3, 259 , ScrH() -  130, 110, 15, Color( 44, 28, 116, 250 ) )
	draw.RoundedBox( 3, 260 , ScrH() -  129, 108, 13, Color( 255, 255, 255, 250 ) )
	
	if armor > 0 then 
		draw.RoundedBox( 3, 259 , ScrH() -  130,10 + armor, 15, Color( 44, 28, 116, 250 ) )
	end
	
	
		// stam
		draw.RoundedBox( 3, 383 , ScrH() -  130, 110, 15, Color( 102, 52, 153, 250 ) )
		draw.RoundedBox( 3, 384 , ScrH() -  129, 108, 13, Color( 255, 255, 255, 250 ) )
		
		if stm > 0 then
		draw.RoundedBox( 3, 383 , ScrH() -  130,10 + stm, 15, Color( 102, 52, 153, 250 ) )
		end

//health shit png

surface.SetDrawColor( 255, 255, 255, 255 )
surface.SetMaterial( ourMat	) -- If you use Material, cache it!
surface.DrawTexturedRect( 190 , ScrH() -  125, 18, 18 )

//armor shit png
surface.SetDrawColor( 255, 255, 255, 255 )
surface.SetMaterial( ourMat2 ) – If you use Material, cache it!
surface.DrawTexturedRect( 305 , ScrH() - 127, 18, 18 )

// stamina shit png
surface.SetDrawColor( 255, 255, 255, 255 )
surface.SetMaterial( ourMat3 ) – If you use Material, cache it!
surface.DrawTexturedRect( 430 , ScrH() - 127, 18, 18 )

// money shit png
surface.SetDrawColor( 255, 255, 255, 255 )
surface.SetMaterial( ourMat4 ) – If you use Material, cache it!
surface.DrawTexturedRect( 149, ScrH() - 155, 18, 18 )

// movement shit png
surface.SetDrawColor( 255, 255, 255, 255 )
surface.SetMaterial( ourMat5 ) – If you use Material, cache it!
surface.DrawTexturedRect( 142, ScrH() - 195, 18, 18 )

// weapon shit png
surface.SetDrawColor( 255, 255, 255, 255 )
surface.SetMaterial( ourMat6 ) – If you use Material, cache it!
surface.DrawTexturedRect( 147, ScrH() - 175, 18, 18 )

end 

	
	
	
	hook.Add("HUDPaint", "thehud", hud) 
[/lua]

Firstly, you’re creating multiple materials in a HUDPaint hook. Move them outside. Secondly, you’re drawing a hell of a lot of circles. Why???

[editline]18th August 2016[/editline]

Instead of drawing a ton of little circles, just draw a single big one using

surface.DrawPoly and the second example on that page.