Skip to content

Commit d4e12e1

Browse files
committed
Bound the number of cleaning passes in the memory guard
1 parent 7b2bd5d commit d4e12e1

File tree

4 files changed

+32
-5
lines changed

4 files changed

+32
-5
lines changed

src/Learning/KWData/KWDatabaseMemoryGuard.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,8 +241,15 @@ const ALString KWDatabaseMemoryGuard::GetSingleInstanceVeryLargeLabel()
241241

242242
// Et dans le cas ou la memoire a du etre nettoyee
243243
if (GetMemoryCleaningNumber() > 0)
244+
{
244245
sLabel += " : all derived variables have been computed using RAM sparingly at the expense of "
245-
"computation time";
246+
"computation time (";
247+
sLabel += IntToString(GetMemoryCleaningNumber());
248+
if (GetMemoryCleaningNumber() == 1)
249+
sLabel += " additional pass)";
250+
else
251+
sLabel += " additional passes)";
252+
}
246253
ensure(sLabel.Find(sMemoryGuardLabelPrefix) == 0);
247254
return sLabel;
248255
}

src/Learning/KWData/KWDatabaseMemoryGuard.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,9 @@ class KWDatabaseMemoryGuard : public Object
215215
static const int GetDefautMinSecondaryRecordNumberFactor();
216216
static const int GetDefautMaxSecondaryRecordNumberFactor();
217217

218+
// Nombre max de passes de nettoyage de la memoire utilisees pour continuer le calcul des attributs
219+
static const int GetMaxMemoryCleaningNumber();
220+
218221
//////////////////////////////////////////////////////////////////////////////////////
219222
///// Implementation
220223
protected:
@@ -306,6 +309,9 @@ class KWDatabaseMemoryGuard : public Object
306309
static const int nDefautMinSecondaryRecordNumberFactor = 100;
307310
static const int nDefautMaxSecondaryRecordNumberFactor = 10000;
308311

312+
// Nombre max de passes de nettoyage de la memoire utilisees pour continuer le calcul des attributs
313+
static const int nMaxMemoryCleaningNumber = 100;
314+
309315
///////////////////////////////////////////////////////////////////////////////////////////
310316
// Gestion de la methode specifique pour ignorer le controle de flow des erreurs
311317

@@ -363,3 +369,8 @@ inline const int KWDatabaseMemoryGuard::GetDefautMaxSecondaryRecordNumberFactor(
363369
{
364370
return nDefautMaxSecondaryRecordNumberFactor;
365371
}
372+
373+
inline const int KWDatabaseMemoryGuard::GetMaxMemoryCleaningNumber()
374+
{
375+
return nMaxMemoryCleaningNumber;
376+
}

src/Learning/KWData/KWObject.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,16 @@ void KWObject::ComputeAllValues(KWDatabaseMemoryGuard* memoryGuard)
183183
// exploitant ces instances creees sont faux et fluctuants selon la memoire disponible
184184
if (not memoryGuard->IsSingleInstanceMemoryLimitReachedDuringCreation())
185185
{
186-
// Nettoyage des donnees de travail temporaire, pouvant etre recalculees
187-
CleanTemporayDataItemsToComputeAndClean();
186+
// On ne le fait pas s'il y a eu trop de passe de nettoyage, pour eviter
187+
// de passer un temps potentiellement enorme
188+
if (memoryGuard->GetMemoryCleaningNumber() < memoryGuard->GetMaxMemoryCleaningNumber())
189+
{
190+
// Nettoyage des donnees de travail temporaire, pouvant etre recalculees
191+
CleanTemporayDataItemsToComputeAndClean();
188192

189-
// Actualisation de la detetcion de depassement memoire
190-
memoryGuard->UpdateAfterMemoryCleaning();
193+
// Actualisation de la detection de depassement memoire
194+
memoryGuard->UpdateAfterMemoryCleaning();
195+
}
191196
}
192197
}
193198
}

src/Learning/KWModeling/KWBenchmarkClassSpec.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ void KWBenchmarkClassSpec::ReadClasses()
6666
temporaryClassDomain->ReadFile(GetClassFileName());
6767
}
6868
}
69+
70+
// Compilation
71+
if (temporaryClassDomain->Check())
72+
temporaryClassDomain->Compile();
6973
Global::SetSilentMode(false);
7074
sLastReadClassFileName = GetClassFileName();
7175
}

0 commit comments

Comments
 (0)