Ref:
https://krishhdax.blogspot.in/2017/04/ax2012-compilecil-and-refresh-services.html
static void CompileCILRefresh(Args _args)
{
#AviFiles
#File
#define.fileName('AxTime.txt')
TextIo file;
FileIoPermission permission;
SysOperationProgress progress;
container fileContainer;
int i;
Dialog dialog;
DialogField dlgCompile;
DialogField dlgCIL;
DialogField dlgIncCIL;
DialogField dlgRefreshService;
int timeStarted[2];
int timeAverage[4]; //1:FUllCompileTime,2:FULLCILCompileTime,3:IncrementalCILTime,4:RefreshServicesTime
int timeExpected;
Filename filename
;
void getAverageTime()
{
filename = WinAPI::getCurrentDirectory() + '\\' + fileName;
permission = new FileIoPermission(filename, #io_read+#io_write);
permission.assert();
if(WinAPI::fileExists(filename))
{
file = new TextIo(filename, #io_read);
fileContainer = file.read();
timeAverage[1] = str2int(conPeek(fileContainer,1));
timeAverage[2] = str2int(conPeek(fileContainer,2));
timeAverage[3] = str2int(conPeek(fileContainer,3));
timeAverage[4] = str2int(conPeek(fileContainer,4));
file = null;
}
CodeAccessPermission::revertAssert();
}
void setAverageTime()
{
permission = new FileIoPermission(filename, #io_write);
permission.assert();
fileContainer = conNull();
fileContainer = conIns(fileContainer,1,int2str(timeAverage[1]));
fileContainer = conIns(fileContainer,2,int2str(timeAverage[2]));
fileContainer = conIns(fileContainer,3,int2str(timeAverage[3]));
fileContainer = conIns(fileContainer,4,int2str(timeAverage[4]));
file = new TextIo(filename, #io_write);
file.write(fileContainer);
file.finalize();
file = null;
CodeAccessPermission::revertAssert();
permission = null;
}
dialog = new Dialog("Compile/CIl/Refresh");
dialog.addInfoImage();
dialog.addText("Please select actions needed and please be aware that all are time consuming processes");
dialog.addGroup("Compile application");
dlgCompile = dialog.addFieldValue(extendedTypeStr(NoYesId),NoYes::No,"AOT Compile");
dialog.addGroup("Compile CIL");
dlgCIL = dialog.addFieldValue(extendedTypeStr(NoYesId), NoYes::No, "FULL");
dlgIncCIL = dialog.addFieldValue(extendedTypeStr(NoYesId), NoYes::No, "Incemental");
dialog.addGroup("Other");
dlgRefreshService = dialog.addFieldValue(extendedTypeStr(NoYesId),NoYes::No,"Refresh Services");
if (!dialog.run())
throw error("Operation aborted");
filename = #fileName;
timeAverage[1] = 3600; // 60:00 min
timeAverage[2] = 1800; // 30:00 min
timeAverage[3] = 900; // 15:00 min
timeAverage[4] = 300; // 5:00 min
getAverageTime();
timeExpected += dlgCompile.value() ? timeAverage[1] : 0;
timeExpected += dlgCIL.value() ? timeAverage[2] : 0;
timeExpected += dlgIncCIL.value() ? timeAverage[3] : 0;
timeExpected += dlgRefreshService.value() ? timeAverage[4] : 0;
progress = new SysOperationProgress();
progress.updateInterval(0);
progress.setAnimation(#AviStopwatch);
progress.setTotal(1 + dlgCompile.value() + (dlgCIL.value() || dlgIncCIL.value()) + dlgRefreshService.value());
timeStarted[1] = timeNow();
info(strFmt("Process stared by %1",curUserId()));
//Compile the application
startLengthyOperation();
sleep(3);
//AOT Compile
if (dlgCompile.value())
{
progress.incCount();
progress.setText(strfmt("AOT Compile compiling | Start time : %1 ETA : %2",time2str(timeNow(),1,1),time2str(timeAverage[1] + timeNow(),1,1)));
//Do function
timeStarted[2] = timeNow();
SysCompileAll::flushClient();
SysCompileAll::compile();
SysCheckList::finished(classnum(SysCheckListItem_Compile));
SysCheckList::finished(classnum(SysCheckListItem_CompileUpgrade));
SysCheckList::finished(className2Id(classStr(SysCheckListItem_CompileServ)));
SysCheckList::finished(classnum(SysCheckListItem_SysUpdateCodeCompilInit));
timeAverage[1] = ((timeNow()-timeStarted[2]) + timeAverage[1])/2;
info(strFmt("AOT Compile toke : %1*",time2str(timeAverage[1],1,1)));
}
//Incremntal CIL
if (dlgIncCIL.value())
{
progress.incCount();
progress.setText(strfmt("Incremental CIL Compiling | Start time : %1 ETA : %2",time2str(timeNow(),1,1),time2str(timeAverage[3] + timeNow(),1,1)));
//Do function
timeStarted[2] = timeNow();
SysCompileIL::generateIncrementalIL();
timeAverage[3] = ((timeNow()-timeStarted[2]) + timeAverage[3])/2;
info(strFmt("Increment CIL toke : %1*",time2str(timeAverage[3],1,1)));
}
//Full CIL
else if (dlgCIL.value())
{
progress.incCount();
progress.setText(strfmt("FULL CIL Compiling | Start time : %1 ETA : %2",time2str(timeNow(),1,1),time2str(timeAverage[2] + timeNow(),1,1)));
//Do function
timeStarted[2] = timeNow();
SysCompileIL::generateIL();
timeAverage[2] = ((timeNow()-timeStarted[2]) + timeAverage[2])/2;
info(strFmt("FULL CIL toke : %1*",time2str(timeAverage[2],1,1)));
}
// Refresh services
if (dlgRefreshService.value())
{
progress.setText(strfmt("Refresh Services | Start time : %1 ETA : %2",time2str(timeNow(),1,1),time2str(timeAverage[4] + timeNow(),1,1)));
progress.incCount();
timeStarted[2] = timeNow();
AifServiceGenerationManager::registerServices();
timeAverage[4] = ((timeNow()-timeStarted[2]) + timeAverage[4])/2;
info(strFmt("Refresh Services toke : %1*",time2str(timeAverage[4],1,1)));
}
setAverageTime();
endLengthyOperation();
//Flush all
sysFlushAOD::main(_args);
sysFlushData::main(_args);
sysFlushDictionary::main(_args);
info(strFmt("*Averagetime"));
info(strFmt("Total time spendt : %1",time2str(timeNow()-timeStarted[1],1,1)));
}