visible = false отменяет перерисовку. Не знаю, откуда вы взяли обратное, но по тесту производительности это очень хорошо видно.
Помещать removeChild в try можно только в том случае, если аргумент removeChild'а никогда не будет равен null, как это ни странно звучит. В том смысле, что можно подстраховаться от краша обработав исключение, а использовать исключения в логике программы неграмотно и медленно. Исключения работают быстро, только если они не происходят

.