well, 30.000.000 tiles is a pretty high number, eh?
of course we would need a piece of code to help you finding the problem, but beforehand I could already say:
1- you don't need to check if every tile is inside the screen. just do something like
for (int y = view.position.y - view.size.y/2; y < view.position.y + view.size.y/2; y++){
for (int x = view.position.x - view.size.x/2; x < view.position.x + view.size.x/2; x++){
window.draw(tile[x][y]);
}
}
(you probably will have to increase this size a bit to avoid blank spaces around the screen)
2- if each tile takes only 1 pixel, dont use tiles. use points, or even better, vertexArrays, so you can draw everything in one draw call.