Maneira mais eficiente de remover caracteres especiais da string

Eu quero remover todos os caracteres especiais de uma string. Caracteres permitidos são A-Z (maiúscula ou minúscula), números (0-9), sublinhado (_) ou o sinal de ponto (.).

Eu tenho o seguinte, funciona, mas eu suspeito (eu sei!) Não é muito eficiente:

    public static string RemoveSpecialCharacters(string str)
    {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.Length; i++)
        {
            if ((str[i] >= '0' && str[i] <= '9')
                || (str[i] >= 'A' && str[i] <= 'z'
                    || (str[i] == '.' || str[i] == '_')))
                {
                    sb.Append(str[i]);
                }
        }

        return sb.ToString();
    }

Qual é a maneira mais eficiente de fazer isso? Como seria uma expressão regular e como ela se compara à manipulação normal de strings?

As cadeias que serão limpas serão bastante curtas, geralmente entre 10 e 30 caracteres de comprimento.

questionAnswers(23)

yourAnswerToTheQuestion