You should not use them more than necessary, because Begin () means preparing the device for rendering sprites, and End () means restoring its previous state. This may depend on some flags in Begin () saying that you do not want state changes, and may complicate your code because you will have to manually set some states.
Device state changes are often slow, and you must prevent them, if not required, they can also interfere with something you do, so if you want to display something not in SpriteBatch, you must call End (), but if you are sprites that you should name once for all sprites.
End() , , Flush() End(). , . , End(), - Flush() reset, Begin().