Como obter corretamente o tamanho do arquivo android.net.Uri?

Eu tenho um android.net.Uri apontando para um arquivo do qual preciso determinar o tamanho do arquivo. Atualmente, isso é feito usando uma consulta no contentResolver (estou usando o Xamarin, então é C #):

var cursor = contentResolver.Query(uri, new string[] {
    Android.Provider.OpenableColumns.Size,
    Android.Provider.OpenableColumns.DisplayName 
}, null, null, null);
cursor.MoveToFirst();
size = cursor.GetLong(0);
fileName = cursor.GetString(1);
cursor.Close();

Isso funciona na maioria das vezes, mas para alguns arquivos, o valor parece ser um pouco maior que o tamanho correto (estou usando o Total Commander como referência).

Deve haver uma maneira melhor de fazer isso, eu realmente preciso das informações de tamanho exato e, como os arquivos são muito grandes, não consigo lê-los primeiro na memória. E por que minha abordagem produz resultados incorretos?

Agradeço antecipadamente por sua ajuda.

questionAnswers(1)

yourAnswerToTheQuestion