Нет никакого различия в сгенерированном промежуточном коде для ++ я и я ++ в этом случае. Учитывая эту программу:
class Program
{
const int counter = 1024 * 1024;
static void Main(string[] args)
{
for (int i = 0; i < counter; ++i)
{
Console.WriteLine(i);
}
for (int i = 0; i < counter; i++)
{
Console.WriteLine(i);
}
}
}
сгенерированный код IL является тем же для обоих циклов:
IL_0000: ldc.i4.0
IL_0001: stloc.0
// Start of first loop
IL_0002: ldc.i4.0
IL_0003: stloc.0
IL_0004: br.s IL_0010
IL_0006: ldloc.0
IL_0007: call void [mscorlib]System.Console::WriteLine(int32)
IL_000c: ldloc.0
IL_000d: ldc.i4.1
IL_000e: add
IL_000f: stloc.0
IL_0010: ldloc.0
IL_0011: ldc.i4 0x100000
IL_0016: blt.s IL_0006
// Start of second loop
IL_0018: ldc.i4.0
IL_0019: stloc.0
IL_001a: br.s IL_0026
IL_001c: ldloc.0
IL_001d: call void [mscorlib]System.Console::WriteLine(int32)
IL_0022: ldloc.0
IL_0023: ldc.i4.1
IL_0024: add
IL_0025: stloc.0
IL_0026: ldloc.0
IL_0027: ldc.i4 0x100000
IL_002c: blt.s IL_001c
IL_002e: ret
Однако это возможно (хотя очень вряд ли), что JIT-компилятор может сделать некоторую оптимизацию в определенных контекстах, которые будут способствовать одной версии по другому. Если бы существует такая оптимизация, тем не менее, она, вероятно, только влияла бы на финал (или возможно первое) повторение цикла.
Короче говоря, не будет никакого различия во времени выполнения простого преинкремента или постинкременте контрольной переменной в конструкции цикличного выполнения, которую Вы описали.
Используйте тег merge в качестве корня XML
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Your Layout -->
</merge>