With the debugging techniques listed above and the output of object states during runtime, program errors can be found out, but they are not of any help with performance problems.
Use the component gip.core.autocomponent.RuntimeDump to investigate performance problems that you add as an instance in an application tree. RuntimeDump may only be instantiated once when an iPlus service is started. Therefore, we recommend adding the instance in the service project with the ACIdentifer "VBDump":
Show VBDump in the visualization so that you can execute the following commands via the context menu:
Dump CPU usage
This command creates a file with the name "UsageCPU_YYYYMMDD_hhmmss.txt" in the temporary directory (%USERPROFILE%\AppData\Local\Temp) where the message log is also stored. Here is an example file:

This file outputs statistics about all threads that were created with the "gip.core.datamodel.ACThread" class. Therefore, you should only use the ACThread class for thread programming.
- In the <<< SUMMARY >>> section, the threads are output according to percentage usage.
- In the <<< DETAILS >>> section, the "Top 20" events that took up the most CPU time are output per thread.
- Below this, the statistics of all delegate queues are output.
- In section <<< THREAD-STATES >>> the thread states are output.
- In the <<< MAPPING MANAGED-Id to NATIVE-Id >>> section, the mapping between the managed thread ID and the "native thread ID" is output. This is useful if you have observed the behavior of the thread usage with the Process Explorer and you want to match the corresponding .NET thread.
Dump Performancelog
This command creates a file with the name "PerfLog_YYYYMMDD_hhmmss.txt" in the temporary directory (%USERPROFILE%\AppData\Local\Temp) where the message log is also stored. Here is an example file:

This file contains usage statistics for all instances that have status-dependent methods. Status-dependent methods are called cyclically by activation via "PABase .SubscribeToProjectWorkCycle()". The execution time of a status-dependent method is logged and output in this performance log.
- In the <<< SUMMARY >>> section, the status-dependent methods are output according to percentage use.
- In the <<< DETAILS >>> section, the "Top 20" events that took the most CPU time are output for each method.
Enable/Disable Performance-logging
This enables or disables performance logging. To activate it permanently when the service starts, add the PerfLogConfiguration section in the App.Config file.
Dump Delegate-Queues
This command creates a file with the name "DelegateQueue_YYYYMMDD_hhmmss.txt" in the temporary directory (%USERPROFILE%\AppData\Local\Temp) where the message log is also stored. Here is an example file:

This file contains statistics on the status and the degree of utilization of all delegate queues.
Restart Delegate-Queue
This command removes all entries from all delegate queues and starts the processing threads again.
Dump all subscribed components
This command creates a file with the name "SubscribedComp_YYYYMMDD_hhmmss.txt" in the temporary directory (%USERPROFILE%\AppData\Local\Temp) where the message log is also stored. This file lists all instances whose status-dependent methods are called cyclically because they were activated using "PABase .SubscribeToProjectWorkCycle()".
Full Dump
Create an empty text file called "Invoke_Dump.txt" in the iPlus installation directory or in the directory where the iPlus service is executed.
The iPlus service starts to output all application trees including the iPlus application tree in the temporary directory. An XML file with the name "RuntimeDump_ProcId_yyyyMMdd_HHmmss.xml" is created. The XML file contains all instances including all property values and private fields as it is also displayed in the diagnostics dialog.
In addition, the current call stack of all threads is output in the message log.
This dump is advantageous if the entire iPlus service hangs and you can no longer send commands to the service from the client. This state only occurs in the rarest of cases, when a specially developed assembly is used that was not programmed thread-safe.
Don't forget to delete the "Invoke_Dump.txt" file from the directory after the XML file has been created!
Here is an example file:
