I am trying to use blender (2.79b) for batch visualization of data on Windows 10. Unfortunately, blender gets very slow after creating a certain amount of objects. I tried to improve things by "flushing" the geometry to a file every so often. My concept was:
while more_data:
add_geometry()
if number_of_objects > limit:
save_file()
delete_all_objects()
Alas, this doesn't seem to help. As more data is processed blender gets slower and slower. I wrote a benchmark test program that creates a simple polygon object (in actual use they would all be different, not the same):
import sys, bpy, time
from mathutils import Vector
verts = [Vector((0, 0, 0)), Vector((1, 0, 0)), Vector((1, 1, 0))]
faces = [ (0, 1, 2) ]
def build_geometry():
for obj_number in range(5000):
base_name ='object_%d' % obj_number
mesh = bpy.data.meshes.new(base_name)
mesh.from_pydata(verts, [], faces)
mesh.update()
obj = bpy.data.objects.new(base_name, mesh)
bpy.context.scene.objects.link(obj)
def remove_geometry():
for o in bpy.data.objects:
bpy.data.objects.remove(o, do_unlink=True)
for m in bpy.data.meshes:
bpy.data.meshes.remove(m, do_unlink=True)
remove_geometry()
for i in range(10):
sys.stdout.write('%d' % i)
start = time.perf_counter()
build_geometry()
stop = time.perf_counter()
sys.stdout.write(' build time = %g' % (stop - start))
# could save the file here, but not relevant
start = time.perf_counter()
remove_geometry()
stop = time.perf_counter()
sys.stdout.write(' cleanup time = %g\n' % (stop - start))
Running the benchmark gives:
blender.exe -b --python D:\python\build_objs.py
0 build time = 1.8863 cleanup time = 6.83109
1 build time = 2.35458 cleanup time = 7.93244
2 build time = 2.89152 cleanup time = 10.4506
3 build time = 3.74924 cleanup time = 11.1356
4 build time = 4.25657 cleanup time = 12.8942
5 build time = 5.38783 cleanup time = 14.2254
6 build time = 5.90367 cleanup time = 16.2433
7 build time = 6.89383 cleanup time = 18.2199
8 build time = 7.97026 cleanup time = 21.7214
9 build time = 9.24869 cleanup time = 23.8938
The 10th iteration is really slow compared to the first.
Is there anything I can do to get a more constant "build" and "cleanup" time?
Can the "cleanup" time (deleting most objects) be reduced?
bpy.context.user_preferences.edit.use_global_undo=Falseat the outset – IRayTrace Apr 02 '19 at 04:10