I’m running into an issue and was wondering if anyone might
shed some light on possible solutions I might be missing. We’re using the framework not as a testing
tool but as an entry tool to automate the entry of information into our
Silverlight application. I wanted to
mention this as the nature of what we are doing plays into the number of iterations
any given task must run through before the set is complete.
The set of commands run successfully for the first 60 – 70 items
but at that point WebAii begins to have trouble communicating with Internet
Explorer. After some investigation it
appears that at the point of trouble IE’s memory use has ballooned to over a
gig. By doing nothing but logging in and
then looping back and forth between two Silverlight URLs in our app I can
observe the issue, but attempting the same on other Sites doesn’t seem to
recreate it. For the moment I’m calling
Refresh() on the browser as that seems to drop the memory use down to normal
levels.
I have a theory on what’s happening and was wanted to see if
I may be correct and if so, if there are any better alternatives to simply
calling Refresh(). Our application is
composed of one XAP file which houses a shell which fills itself with content
which is housed in multiple other XAP files.
As I am usually interacting only with one particular section, it is
possible that actions are performed on that section and then an action
resulting in a navigate is performed while the framework is still busy in the
background injecting its connection into other XAPs which the Application is
still trying to load. My guess is that
due to the navigate occurring before the framework is really ready that it is
forgetting about any connections/objects/etc that it was in the process of
constructing and that memory is never reclaimed until IE’s active in-memory
cache is cleared by the refresh (or process termination).
I am waiting until the Browser reports ready, and have gone
so far as to implement a request/response counter/matcher using the WebAii
proxy to supplement Browser ready checks but neither are accurately
representing whether the Silverlight application is actually ready with all the
sub-components loaded.
Is there a better way to determine Silverlight application readiness? I’d like to try and avoid performing element
find checks to determine module loading as I would like to be able to utilize
the same check code everywhere in the app. If this is problematic, is there a way to tell the framework to clear or otherwise refresh itself or the disconnected objects it may have floating in IE's memory without doing a full browser refresh?
Any insight or help is much appreciated.