Никогда не делал через байтаррей. Решил провести тест.

Код AS3:
public class xmlTest extends Sprite {
[Embed(source = "example.xml", mimeType="application/octet-stream")] private static const EXAMPLE_XML: Class;
public function xmlTest() {
var start : Number;
var now : Number;
var counter : int;
// test 1
start = getTimer();
for(counter = 0; counter < 10000; counter++){
getXML_1();
}
now = getTimer();
trace("get xml var 1 time : " + (now - start));
// test 2
start = getTimer();
for(counter = 0; counter < 10000; counter++){
getXML_2();
}
now = getTimer();
trace("get xml var 2 time : " + (now - start));
}
private function getXML_1():XML{
return XML(new String(new EXAMPLE_XML()));
}
private function getXML_2():XML{
var file : ByteArray = new EXAMPLE_XML();
var str : String = file.readUTFBytes( file.length );
var xml : XML = new XML( str );
return xml;
}
Результат:

Код:
get xml var 1 time : 4894
get xml var 2 time : 5091
если поменять тесты местами, то разрыв больше:

Код:
get xml var 2 time : 5696
get xml var 1 time : 5018
Проводил тест раз 20, чтобы быть уверенным.
Ввиду таких результатов по скорости мне кажется излишним возится с вариантом с ByteArray.