I have found a reasonable solution that works for me.
I have been struggling with this for a long time with a pretty good spec Windows 10 host and Ubuntu 18.04 guest that was totally unusable due to slow graphics, and I read tons of different suggestions that made minor differences but nothing made it useable.
What I have noticed is that (for me) in full screen mode everything lagged so much that it stopped re-rendering until I moved the mouse, then the blocks I hovered over would re-render. However in normal windows (maximised but not fullscreen mode) the lag was minimal and totaly useable.
What I found to work for me is to use a resolution that leaves a slight gap on all edges. This should still make it bigger than normal window mode and I'm sure some xorg gurus can tweak it to within a pixel of the screen edge.
Find the host resolution and then go to fullscreen mode, set the guest resolution to (ideally) the same ratio but slightly smaller than the host.
My thinking is that if the guest is not touching or going beyond the host screen, rendering calculations seem to respond fairly smoothly. Don't ask me why, it is just an observation.
Virtualbox will recognise and remember different display devices so if you use your box on different monitors, don't forget to do the same for that monitor and then Virtualbox will remember everytime you switch monitors.