Re: [flexcoders] Automation and Application Domains
Yes, it does seem a problem - hence me trying to figure out if it was a 'burned in' limitation of the flash runtime, or something I could find a workaround for. On Wed, Oct 2, 2013 at 6:58 PM, Alex Harui aha...@adobe.com wrote: ** Even generating shim classes would result in conflicts if you have more than one definition of a class you are trying to shim into the main applicationdomain. But if you can guarantee there isn't conflicts for a particular test scenario, then maybe you can test by loading into the main app domain. From: Nigel Magnay nigel.mag...@gmail.com Reply-To: flexcoders@yahoogroups.com flexcoders@yahoogroups.com Date: Tuesday, October 1, 2013 4:38 AM To: flexcoders@yahoogroups.com flexcoders@yahoogroups.com Subject: Re: [flexcoders] Automation and Application Domains Yes, it seems to fail. RIAtest has a component 'inspector', which shows the component tree. If my UI component is in a different (child) application domain, it never appears in the inspector (and events from manipulating it never get received). When I raised a ticket against it (and asked if there were some API that I could use to perhaps inform it more directly to my new application domains), they pointed me to the supposed flex automation restriction - hence me starting to dig to see if I might be able to overcome the restriction - perhaps by generating shim classes or delegates.. On Fri, Sep 27, 2013 at 7:25 PM, Alex Harui aha...@adobe.com wrote: ** Did you actually try it and found that it fails? I would think it should be able to introspect child appdomains. From: Nigel Magnay nigel.mag...@gmail.com Reply-To: flexcoders@yahoogroups.com flexcoders@yahoogroups.com Date: Friday, September 27, 2013 6:36 AM To: flexcoders@yahoogroups.com flexcoders@yahoogroups.com Subject: [flexcoders] Automation and Application Domains We are using RIAtest, which uses flex automation to test some applications. Reading the flex documentation, it contains the following: Testing applications that load external libraries ... A library that is loaded at run time (including run-time shared libraries (RSLs)) must be loaded into the ApplicationDomain of the loading application. If the SWF file used in the application is loaded in a different application domain, automated testing record and playback will not function properly. This is particularly inconvenient for us; we load UI controls into separate ApplicationDomains (all children of ApplicationDomain.currentDomain) because they can have conflicting classnames, and this allows each form to be generated in isolation, and they cannot interfere with each other. The thought of having to refactor hundreds of classes is not appealing. This seems to prevent RIAtest's inspector from finding child controls sourced from that loader. Is there any way around this restriction, perhaps by implementing some kind of delegate class, or overriding the automation provider to allow it to callback to discover the applicationdomains it needs to search?
Re: [flexcoders] Automation and Application Domains
Yes, it seems to fail. RIAtest has a component 'inspector', which shows the component tree. If my UI component is in a different (child) application domain, it never appears in the inspector (and events from manipulating it never get received). When I raised a ticket against it (and asked if there were some API that I could use to perhaps inform it more directly to my new application domains), they pointed me to the supposed flex automation restriction - hence me starting to dig to see if I might be able to overcome the restriction - perhaps by generating shim classes or delegates.. On Fri, Sep 27, 2013 at 7:25 PM, Alex Harui aha...@adobe.com wrote: ** Did you actually try it and found that it fails? I would think it should be able to introspect child appdomains. From: Nigel Magnay nigel.mag...@gmail.com Reply-To: flexcoders@yahoogroups.com flexcoders@yahoogroups.com Date: Friday, September 27, 2013 6:36 AM To: flexcoders@yahoogroups.com flexcoders@yahoogroups.com Subject: [flexcoders] Automation and Application Domains We are using RIAtest, which uses flex automation to test some applications. Reading the flex documentation, it contains the following: Testing applications that load external libraries ... A library that is loaded at run time (including run-time shared libraries (RSLs)) must be loaded into the ApplicationDomain of the loading application. If the SWF file used in the application is loaded in a different application domain, automated testing record and playback will not function properly. This is particularly inconvenient for us; we load UI controls into separate ApplicationDomains (all children of ApplicationDomain.currentDomain) because they can have conflicting classnames, and this allows each form to be generated in isolation, and they cannot interfere with each other. The thought of having to refactor hundreds of classes is not appealing. This seems to prevent RIAtest's inspector from finding child controls sourced from that loader. Is there any way around this restriction, perhaps by implementing some kind of delegate class, or overriding the automation provider to allow it to callback to discover the applicationdomains it needs to search?
[flexcoders] Automation and Application Domains
We are using RIAtest, which uses flex automation to test some applications. Reading the flex documentation, it contains the following: Testing applications that load external libraries ... A library that is loaded at run time (including run-time shared libraries (RSLs)) must be loaded into the ApplicationDomain of the loading application. If the SWF file used in the application is loaded in a different application domain, automated testing record and playback will not function properly. This is particularly inconvenient for us; we load UI controls into separate ApplicationDomains (all children of ApplicationDomain.currentDomain) because they can have conflicting classnames, and this allows each form to be generated in isolation, and they cannot interfere with each other. The thought of having to refactor hundreds of classes is not appealing. This seems to prevent RIAtest's inspector from finding child controls sourced from that loader. Is there any way around this restriction, perhaps by implementing some kind of delegate class, or overriding the automation provider to allow it to callback to discover the applicationdomains it needs to search?
[flexcoders] Equivalent of editorUsesEnterKey in spark
In mx:Datagrid, you can easily declare that a column uses the enter key, so you can enter multiline text into it. Basically, exactly this: http://blog.flexexamples.com/2007/09/30/using-a-flex-textarea-control-as-a-drop-in-item-editor/ (see how you can hit enter in the grid cell, and enter multiline text). How does one do this in Spark? I've diagnosed the editor ending when it receives the keyboard ENTER event into DatagridEditor::editor_keydownHandler. I can't just cancel / stop propagation of the event / modify the event, otherwise the textarea doesn't add the CR. I can't override in some custom version DataGridEditor because editor_keyDownHandler is declared private. The DataGridEditor anyway is instantiated in an mx_internal function in DataGrid. It seems like this behaviour is burnt in and can't easily be reversed... ?
Re: [flexcoders] Frustrations with the profiler - analyzing memory usage.
Thanks for that - that's very helpful information. I'm getting dragged into diagnosis because on very low-spec machines our app is tending to eat memory causing it to heavily slow down. I've managed to diagnose some of these (use of setTimeout, Bindings that never go away) which is liable to help hugely. What I'm having difficulty in is determining what things in the profiler are *genuine leaks*, and what things are things the GC will eventually get to as they're weak references (I do the System.gc() and newLocalConnection().connect( 'foo'); tricks beforehand, but they don't feel like they're reliable. It's a shame there isn't a System.reallyreallyfullGCandIDontCareHowLongItTakes() ) A good example is mx.core:EmbeddedFont. When the app is in use, this number doubles. So I analyse an instance, and find only 1 path - which it states as simply mx.core:EmbeddedFont (1 Path), GC Root=YES and allocated in mx.core:EmbeddedFontRegistry:GetAssociatedModuleFactory(). What I believe that's telling me is that the reference is there because of the static EmbeddedFontRegistry in EmbeddedFont, and it's being stored in that registry in a cache (cachedFontsForObjects) - which is a weak dictionary. My gut instinct at this point is this is irrelevant, it'll get GCed eventually. Two things strike me though - I'm guessing that it's in that dictionary as the object reference view stops at the EmbeddedFont, which seems a shame. That makes it difficult in any code that's pretty complex - I'm guessing it'll be GCed. But I wonder now if *all* those things will be GCed *eventually*. Why didn't the 'invoke GC' parts actually cause it to be collected.. t On Tue, Feb 5, 2013 at 7:32 PM, Alex Harui aha...@adobe.com wrote: ** The true test of a leak is whether your OS’s process manager says that memory consumption keeps going up. Before we had a profiler, we would add code to the app to exercise some sequence (by faking button events, etc), force garbage collection, and report System.totalMemory over and over again and run it overnight. Due to the way Flash manages memory, just manually exercising the sequence a few dozen times may show increasing memory even though there isn’t a leak, although really bad leaks will show up in System.totalMemory or in the OS process manager pretty quickly. Leaky apps will eventualy crash the browser, or just report an endless increase in memory, way past what you would expect for an app of that size and complexity. Historically, the profiler has shown a dependency on the version of the Flash Player. Whatever version of Flash Player is recommended for the default SDK in your version of Flash Builder should be the one to use when profiling. Newer and older versions may report memory slightly differently and fool the profiler. HTH, -Alex On 2/5/13 5:57 AM, Nigel Magnay nigel.mag...@gmail.com wrote: We have an application that is leaking memory. Sadly, trying to diagnose this with the flex profiler (4.6, 4.7) is proving to be a frustrating experience. I've picked on one object class to try and understand what is going on. We have a wizard-style dialog box with a sidebar control 'wizardlinks' which adds 'wizardlink' objects to it. Both are Spark group controls. The links are being added to the group with an 'addElement' call. The WizardLink instances are growing in memory and do not seem to be being released. I've pared them right down to try and eliminate possible listeners. If I immediately remove the link, Something still seems to hold on to it. If I view it in the profiler object view, it expands saying (1 Path) but won't describe what it is. Even more mysteriously - if I run with Watch live memory data, I can see the instances going up -- but if I then do a memory dump, those instances are now missing. If I don't run with 'watch live memory data', they are there. Part of this feels like chasing shadows - are these real leaks, or just things the collector will eventually get round to? -- Alex Harui Flex SDK Team Adobe Systems, Inc. http://blogs.adobe.com/aharui
[flexcoders] Frustrations with the profiler - analyzing memory usage.
We have an application that is leaking memory. Sadly, trying to diagnose this with the flex profiler (4.6, 4.7) is proving to be a frustrating experience. I've picked on one object class to try and understand what is going on. We have a wizard-style dialog box with a sidebar control 'wizardlinks' which adds 'wizardlink' objects to it. Both are Spark group controls. The links are being added to the group with an 'addElement' call. The WizardLink instances are growing in memory and do not seem to be being released. I've pared them right down to try and eliminate possible listeners. If I immediately remove the link, Something still seems to hold on to it. If I view it in the profiler object view, it expands saying (1 Path) but won't describe what it is. Even more mysteriously - if I run with Watch live memory data, I can see the instances going up -- but if I then do a memory dump, those instances are now missing. If I don't run with 'watch live memory data', they are there. Part of this feels like chasing shadows - are these real leaks, or just things the collector will eventually get round to?
Re: [flexcoders] Re: Flex alternatives
Adobe’s focus for FlashBuilder is on building ActionScript gaming and premium video projects that run on the Flash player. I think many people assumed that the driver was legacy in-browser flex apps, plus AIR apps for mobile devices. That the older, legacy support had been farmed out to Apache, leaving the Flash Builder products as 'premium value-added design tools' fit consistently with what Adobe does elsewhere. The (baffling) removal of design view in 4.7 puts that impression to the sword, however. I'm not saying it's the wrong way to go - it's after all up to Adobe to choose where to invest their product development. It's in a sense good to know that Adobe has ceded all hope of competing with Google or Microsoft for HTML5 application building - that makes the choices a bit easier.
[flexcoders] Flex, updateDisplayList and clipping.
Hi. I have a component that uses the Graphics primitives in the updateDisplayList. It does lots of text outputting, so it uses the technique of having a single UITextField, getting the bitmap data and bitmapFill-ing it to the canvas. Adding multiple first-class components to the canvas is just way, way too slow to be viable. This all works great. However, we now want to draw other things - things that are not so easy to clip - eg: Circles! I was surprised to see that Graphics offers no clipping. Is the only way around this to draw the component to something like a Sprite, then to bitmapFill that to the screen doing manual clipping calculations ?
[flexcoders] 3rd party RSLs ?
Would I be correct in saying that any RSLs that my SWF uses must be compiled with (exactly) the same version of the SDK ? I have an SWC that I'm using as an RSL rather than linking directly, and it's bombing out with VerifyError: Error #1053: Illegal override of getPollSyncMessageResponder in mx.messaging.channels.NetConnectionChannel. I believe that's because it was built with an (older) version of the SDK; but I wanted to verify this. Is there any way of forcing an RSL to become compatible with a different SDK, or am I stuck recompiling from source ?
[flexcoders] Diagnosing a TypeError #1034 with RSLs
I've just been updating our build to use the latest Flexmojos 4.1-beta, and to use RSL versions of the 4.5.1 flex framework. To do this, I've included all the dependencies in a manual, correct order, so that the RSL load order is correct. I've even manually added entries to get the correct application-domain-targetdefault/application-domain-target entries for the runtime-shared-library-path elements, and validated against the flash builder generated -config xml. It works. Mostly. I have one rather frustrating error - a TypeError. I believe I understand what it is telling me, but I can find no way of getting anything sensible out of flash to help me figure out why the domains are screwed up. The link reports and config outputs all look OK to me. The error is: TypeError: Error #1034: Type Coercion failed: cannot convert to xreader.converters.reflection.ReflectionProvider. at xreader::xreader() at xreader::Modelxreader()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/xreader/Modelxreader.as:33] at Function/anonymous()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/managers/SystemManager.as:65] at Function/anonymous()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/rpc/AdminService.as:96] at Function/http://adobe.com/AS3/2006/builtin::call() at Function/anonymous()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/rpc/BaseWebService.as:82] at net.mycorp.mycorp.util::Timing/time()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/net/mycorp/mycorp/util/Timing.as:61] at rpc::BaseWebService/resultHandler()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/rpc/BaseWebService.as:80] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at mx.rpc::AbstractOperation/ http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[E :\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AbstractOperation.as:249] at mx.rpc::AbstractInvoker/ http://www.adobe.com/2006/flex/mx/internal::resultHandler()[E :\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:318] at mx.rpc::Responder/result()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\Responder.as:56] at mx.rpc::AsyncRequest/acknowledge()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:84] at DirectHTTPMessageResponder/completeHandler()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\messaging\channels\DirectHTTPChannel.as:451] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at flash.net::URLLoader/onComplete() (suspicious that there is no class mentioned in the 'cannot convert to' part. The flex-app includes mycorp-flex-components and mycorp-flex-xreader as RSLs. mycorp-flex-components references mycorp-flex-xreaderas an 'external', and at the point of the error is passing an object which is a subclass of one defined within mycorp-flex-xreader (ReflectionProvider), but the class there doesn't think the type is correct. I can only assume that for some reason there's something wierd going on with domains, but I cannot figure out what. Is there any tooling that could help to figure this out?
Re: [flexcoders] Diagnosing a TypeError #1034 with RSLs
It's just passing classes that are constructed in the normal way; - mycorp-flex-xreader rsl defines public class XReader { ... public function XReader(reflectionProvider:ReflectionProvider) {} where public interface ReflectionProvider { ... } public class ASReflectionProvider implements ReflectionProvider { .. } mycorp-flex-components defines public class ModelXReader extends XReader { ... public function ModelXReader() { .. super( new ModelReflectionProvider() ); } public class ModelReflectionProvider extends ASReflectionProvider { ... } mycorp-flex-xreader and mycorp-flex-components are RSLs in mycorp-flex-app; mycorp-flex-xreader is an external in mycorp-flex-components. It's bombing out here trying to call the super() constructor, which I can only think means that there are 1 definitions for ReflectionProvider, which I don't understand.. On Wed, Nov 2, 2011 at 8:06 PM, Alex Harui aha...@adobe.com wrote: ** What is the code doing? If it is trying to find a class definition by name and can’t that might be the issue. On 11/2/11 12:21 PM, Nigel Magnay nigel.mag...@gmail.com wrote: I've just been updating our build to use the latest Flexmojos 4.1-beta, and to use RSL versions of the 4.5.1 flex framework. To do this, I've included all the dependencies in a manual, correct order, so that the RSL load order is correct. I've even manually added entries to get the correct application-domain-targetdefault/application-domain-target entries for the runtime-shared-library-path elements, and validated against the flash builder generated -config xml. It works. Mostly. I have one rather frustrating error - a TypeError. I believe I understand what it is telling me, but I can find no way of getting anything sensible out of flash to help me figure out why the domains are screwed up. The link reports and config outputs all look OK to me. The error is: TypeError: Error #1034: Type Coercion failed: cannot convert to xreader.converters.reflection.ReflectionProvider. at xreader::xreader() at xreader::Modelxreader()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/xreader/Modelxreader.as:33] at Function/anonymous()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/managers/SystemManager.as:65] at Function/anonymous()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/rpc/AdminService.as:96] at Function/http://adobe.com/AS3/2006/builtin::call() at Function/anonymous()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/rpc/BaseWebService.as:82] at net.mycorp.mycorp.util::Timing/time()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/net/mycorp/mycorp/util/Timing.as:61] at rpc::BaseWebService/resultHandler()[/Users/magnayn/dev/mycorp/mycorp-workspace/mycorp/flex-modules/mycorp-flex-components/src/main/flex/rpc/BaseWebService.as:80] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at mx.rpc::AbstractOperation/ http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AbstractOperation.as:249] at mx.rpc::AbstractInvoker/ http://www.adobe.com/2006/flex/mx/internal::resultHandler()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:318] at mx.rpc::Responder/result()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\Responder.as:56] at mx.rpc::AsyncRequest/acknowledge()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:84] at DirectHTTPMessageResponder/completeHandler()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\messaging\channels\DirectHTTPChannel.as:451] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at flash.net::URLLoader/onComplete() (suspicious that there is no class mentioned in the 'cannot convert to' part. The flex-app includes mycorp-flex-components and mycorp-flex-xreader as RSLs. mycorp-flex-components references mycorp-flex-xreaderas an 'external', and at the point of the error is passing an object which is a subclass of one defined within mycorp-flex-xreader (ReflectionProvider), but the class there doesn't think the type is correct. I can only assume that for some reason there's something wierd going on with domains, but I cannot figure out what. Is there any tooling that could help to figure this out? -- Alex Harui Flex SDK Team Adobe System, Inc. http://blogs.adobe.com/aharui
[flexcoders] Stupid issue with Error #2173: Unable to read object in stream.
Business objects defined in SWC; linked as RSL. All classes included. Occasional errors, of this form: ArgumentError: Error #2173: Unable to read object in stream. The class my.klass.MyClass does not implement flash.utils.IExternalizable but is aliased to an externalizable class. I know I can fix this in the RSL with var flex_is_lame:Object = [ MyClass, MyOtherClass, MyYetAnotherClass, ] But that feels a stupid solution to persuading the environment not to throw away classes. Is there a better way?
Re: [flexcoders] Re: Performance feedback PLEASE
Some figures: Mac Pro 2008, 8 cores @ 2.8Ghz; NVidia 8800 GT. Under flash 10.0 : ~23fps Under flash 10.1 : ~46fps Here's the kicker On the same machine, running Windows in VMWare fusion in a window : Under flash 10.0 : ~64fps Yep. That's right. It's much quicker in a Windows VM. Little wonder Apple has such distaste for Adobe these days. --- In flexcoders@yahoogroups.com flexcoders%40yahoogroups.com, Allan Pichler dreamc...@... wrote: I was wondering if anyone could take a quick glance at my AS3 3d renderer http://api.pluton.webhouse.dk/pool3d/pool3d.html and reply what FPS they get on their gear. If you could also provide your CPU info that would be extremely helpful. For the curious the engine sports the following features: Subpixel positioning (1/4 pixel on both x y) Antialiasing Ambient light Specular light Best regards and have a wonderful day! Allan Pichler RIA Architect - ColdFusion/Flex/Ajax/UI Email: dreamc...@... Phone DK: +45 22 68 08 88 Phone US: +1 (415) 683 0313 Skype: apichler Yahoo: allan_pichler Facebook: www.facebook.com/apichler LinkedIn: www.linkedin.com/in/apichler
[flexcoders] Flex4 Tile performance very slow?
Hi We have a flex3 app, part of which has a dialog box from which the user can pick a particular graph-type component to add to their display. Internally, this is generated with an mx:Tile list, where the dynamic list of children is created then addChild()-ed to the tile. This seems fine - but in certain circumstances seems appallingly slow. To illustrate - if we have a test doing mx:Tile id = theTile left=10 right=10 top=10 bottom=10/ Then if you do something like the following: for(var i:int=0;i50;i++) { var j:Button = new Button(); j.width = 100; j.height = 75; theTile.addChild(j); } Then it executes very very fast - too fast to even notice. But if I replace a 'button' with an mx.charts.LineChart it slows down to be a couple of seconds, which is on the boundary of being acceptable. But if I change it to be a (degrafa-based) com.brightPoint.controls.DegrafaGauge, it's 5 seconds; not what you want when a user should be flipping through pages quickly. I tried replacing the mx:Tile with a new Spark BorderContainer, and it's no better. It feels slower than flex3 was (but that's just a vague impression). I suspect I need to be fiddling with ItemRenderers, but I'm not sure it's going to really help. Are these just badly implemented components? Is there something else I can do to mitigate the initial render slowness (e.g: is it actually burning time trying to lay something out) ?
[flexcoders] Popup focus issue, seems very broken
I have a very odd issue in my Flex3 app. I have a popup that is an mx:TitleWindow, instantiated with the popupManager in the normal way. It has a number of buttons, and a canvas. On creationComplete, an additional control is dynamically added to the canvas using childCanvas.addChild(). Everything works perfectly, *except* that the focus does not arrive in the popup; it remains in the background application window (which is blurred out as normal). On tabbing, I can observe the blue focus rectangle moving about the old top-level window. This doesn't always happen- but in about 75% of cases it does. If I manually set the focus into the popup (e.g into a textfield or a button), then tabbing continues to only have an effect in the wrong window. I've tried explicitly setting the focus in the creationComplete method (setFocus), both in the popup and from the outer container but no dice. I've tried making the added component trivially simple, and it still seems to cause it to break. Any good ideas, or is this just terminally broken?
[flexcoders] XML performance and getting sensible / useable Profiler information
Hello I have a flex project that is consuming XML data from a web service; (the detail of which is that it's coming across in an XStream serialised form). In flex, I can parse this, and convert it into native objects (with effectively an ActionScript implementation of XStream). Unfortunately, the performance is horrible. For around 1Mb of data, representing about 3500 objects to be created, takes around 5 seconds. If 1Mb was the largest document size, I could probably live with it... but of course it isn't. Now, I had hoped to use the flex profiler in order to try and determine which bit is actually slow, as quite a bit of effort has gone into caching things that are known to be slow (e.g. class definition lookups). Unfortunately, again, the flex profiler seems to not be very useful. Firstly it doesn't often report on some classes at all, it often reports obviously bogus values (e.g. methods with cumulative time, but no actual calls (!)). It looks as if internal VM time, perhaps doing things like XML.getAttribute aren't being included (my gut feel is that my code is running reasonably fast, it's just coming up against VM performance that just isn't terribly good)., or perhaps that it's not recording in anything like a useful level of granularity. And because there's no threading, I can't even mitigate it by putting it in a background updater thread. I could probably add some AMF3 support. There's a variety of reasons why I didn't want to do that, as it's yet another output format to have to add on the server, which has already quite a bit of extra code to deal with things like removing hibernate proxies. TBH, it's disappointing the performance is so poor and is likely to add to the calls to be switching to silverlight. Are there any better profilers? Are there any details on the performance characteristics of the XML support, that I might use to speed it up?