Het kan echter voorkomen dat het compileren van een productmodel het systeem laat bevriezen. Een model dat 2975 methoden genereerd, gaf ik na 30 minuten de opdracht tot afbreken. De oorzaak zit hem in de compiler van deze funcionaliteit;
Effectief: ga alle methodes langs en verwijder deze. Bij 2975 methoden doet dit meer dan een seconde per methode, dus ongeveer 50 minuten. Dat is slechts één onderdeel van de stappen, maar de oorzaak waarom het lang duurt.
Dit heb ik vervangen door het volgende:
Effectief: verwijder de class en maak deze opnieuw aan met behoud van ID. Anders gaat het ID's gebruiken en dat is minder makkelijk als in dezelfde laag ook nog ontwikkeld wordt in een DEV omgeving en er ID conflicten gaan ontstaan. code:
TreeNode methodNode;
TreeNodeIterator nodeIterator;
UtilIdElements utilIdElements; // INT561
TreeNode tn;
;
if (useClasses)
{
classBuild.classNode().AOTrestore();
classBuild.classNode().AOTsave();
// INT561
// Drop & recreated with existing ID much more efficient then
// delete all subnodes (methods).
utilIdElements.initValue();
utilIdElements.Name = classBuild.classNode().name();
utilIdElements.recordType = UtilElementType::Class;
utilIdElements.Id = classbuild.classNode().iD();
classBuild.classNode().AOTdelete();
utilIdElements.insert();
tn = xUtilIdElements::getNode(utilIdElements);
if (tn)
{
tn.AOTcompile(1);
tn.AOTsave();
}
classBuild = new classBuildConfigurator(utilIdElements.name, true);
// INT561
this.addSource2TreeSource(PBA::_pbaSourceArgs() + PBA::cr() + PBA::start() + PBA::cr() + PBA::tabSpace() + PBA::callSuper() + PBA::cr() + PBA::tabSpace() + PBA::PBAInitCall(useClasses) + PBA::cr());
Hierbij heb ik gebruik gemaakt van deze link:
http://www.axaptapedia.com/ClassBuild_Class