We did have a look at the case with the aim to understand the performance issues you face. In order to test and validate the scenario, I did setup a dummy modeltype with a single class and and the table as described in your message. In addition, I also added an event log to that implementation to trace the time from trigger of the script to finalization. Please find a short analysis below with a model containing 24 instances, each with 8 different XML documents setup in the table and pointing to an about 100KB XML file:
For the analysis, we make use of a self-developed EVENT Debugging Panel to capture the times it takes to perform the script and compare start and end times. To add this to your library, copy the following lines into the "AppInitialized" EVENT of the "External coupling" library attribute:
1# create the dockable window for the output stream
2CC "AdoScript" CREATE_OUTPUT_WIN winid:"EVENTLOG" title:"Event Logging"
3
4# establish a global procedure as a helper implementation for timestamped logging
5PROCEDURE global EVENT_LOG msgType:string message:string {
6 CC "Application" GET_DATE_TIME
7 date-format:"dd/mm/yyyy" time-format:"hh:mm:ss"
8 SET currentDateTime: ((date) + " " + (time))
9 CC "AdoScript" OUT winid:"EVENTLOG" text: ("[" + (msgType) + "@" + currentDateTime + "]: " + (message) + "\n")
10}
To add a statement in the new window, use:
1# Initial event log message for the "AppInitialized" event
2EVENT_LOG msgType:"EVENT_LOG" message: ("AppInitialized")
The implementation of all cases is packaged in the attached ZIP file, the library can be accessed through the ABL file. Make sure to correct the script paths in the "External coupling" library attribute. As XML files, any XML file can be used.
1) ONLY parsing pointers and reading content into ADOxx as String-> less than 1 second, see console output below
[EVENT_LOG@19/12/2013 16:22:02]: Start parse and read of model content
[EVENT_LOG@19/12/2013 16:22:02]: End parse and read of model content
2) Parsing pointers and reading content into ADOxx as String, write back to a temporary file on the local machine-> about 1 second, see console output below
[EVENT_LOG@19/12/2013 16:23:32]: Start parse and read of model content
[EVENT_LOG@19/12/2013 16:23:33]: End parse and read of model content
3) Parsing pointers and reading content into ADOxx as String, write back to a temporary file, perform an XSL transformation-> 1min and 20secs, see console output below
[EVENT_LOG@19/12/2013 16:24:10]: Start parse and read of model content
[EVENT_LOG@19/12/2013 16:25:30]: End parse and read of model content
4) Parsing pointers and reading content into ADOxx as String, write back to a temporary file, perform an XSL transformation, store transformation results in ADOxx-> 1min and 21secs, see console output below
[EVENT_LOG@19/12/2013 16:26:26]: Start parse and read of model content
[EVENT_LOG@19/12/2013 16:27:47]: End parse and read of model content
From the analysis above, we do assume that the transformation step is problematic, meaning the external call to the XML parser/transformer.