diff --git a/SeeSharp/Experiments/Benchmark.cs b/SeeSharp/Experiments/Benchmark.cs
index a9ea24b..0f796f5 100644
--- a/SeeSharp/Experiments/Benchmark.cs
+++ b/SeeSharp/Experiments/Benchmark.cs
@@ -59,7 +59,9 @@ void RunScene(SceneConfig sceneConfig, string format, bool skipReference) {
experiment.OnStartScene(scene, dir, sceneConfig.MinDepth, sceneConfig.MaxDepth);
var methods = experiment.MakeMethods();
- foreach (var method in methods) {
+ for (int i = 0; i < methods.Count; ++i) {
+ var method = methods[i];
+
string path = Path.Join(dir, method.Name);
Logger.Log($"Rendering {sceneConfig.Name} with {method.Name}");
@@ -78,6 +80,11 @@ void RunScene(SceneConfig sceneConfig, string format, bool skipReference) {
scene.FrameBuffer.MetaData["RayStats"] = scene.Raytracer.Stats;
scene.FrameBuffer.MetaData["ShadeStats"] = ShadingStats.Current;
scene.FrameBuffer.WriteToFile();
+
+ if (experiment.DeleteMethodAfterRun) {
+ methods.RemoveAt(i);
+ i--;
+ }
}
experiment.OnDoneScene(scene, dir, sceneConfig.MinDepth, sceneConfig.MaxDepth);
}
diff --git a/SeeSharp/Experiments/Experiment.cs b/SeeSharp/Experiments/Experiment.cs
index ff822a2..6b51402 100644
--- a/SeeSharp/Experiments/Experiment.cs
+++ b/SeeSharp/Experiments/Experiment.cs
@@ -29,6 +29,12 @@ public Method(string name, Integrator integrator) {
}
}
+ ///
+ /// If true, the Benchmark will drop the method reference after execution. This allows costly integrator
+ /// data to be freed as soon as possible. Disadvantage: all integrator state will be lost. The default is false.
+ ///
+ public virtual bool DeleteMethodAfterRun => false;
+
///
/// Factory function for the methods.
///