Como detectar melhor a codificação no arquivo XML?

Para carregar arquivos XML com codificação arbitrária, tenho o seguinte código:

Encoding encoding;
using (var reader = new XmlTextReader(filepath))
{
    reader.MoveToContent();
encoding = reader.Encoding;
}

var settings = new XmlReaderSettings { NameTable = new NameTable() };
var xmlns = new XmlNamespaceManager(settings.NameTable);
var context = new XmlParserContext(null, xmlns, "", XmlSpace.Default, 
    encoding);
using (var reader = XmlReader.Create(filepath, settings, context))
{
    return XElement.Load(reader);
}

Isso funciona, mas parece um pouco ineficiente abrir o arquivo duas vezes. Existe uma maneira melhor de detectar a codificação para que eu possa fazer:

 1. Open file
 2. Detect encoding
 3. Read XML into an XElement
 4. Close file

questionAnswers(2)

yourAnswerToTheQuestion