Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python和VTK进行内存管理_Python_Python 2.7_Memory Management_Vtk - Fatal编程技术网

使用python和VTK进行内存管理

使用python和VTK进行内存管理,python,python-2.7,memory-management,vtk,Python,Python 2.7,Memory Management,Vtk,我编写了一个相当笨重的python程序,它创建了一个具有特定几何结构的单位单元,并对其进行了复制,这样我就得到了一个单位单元的3x3x3数组。结果保存为.stl。目标是直接创建这些结构,而不是使用CAD 我的问题是计算时间很烦人(8x8大约需要2分钟,比我通常需要的时间要少)。最大的问题是,10x10甚至不可能实现。VTK立即抛出一个错误“无法分配大小为8字节的[大量]元素”。这使我相信我的内存管理不足(不存在) 我读过 VTKStaskPosith,但似乎只能找到C++的解释。如何在pytho

我编写了一个相当笨重的python程序,它创建了一个具有特定几何结构的单位单元,并对其进行了复制,这样我就得到了一个单位单元的3x3x3数组。结果保存为.stl。目标是直接创建这些结构,而不是使用CAD

我的问题是计算时间很烦人(8x8大约需要2分钟,比我通常需要的时间要少)。最大的问题是,10x10甚至不可能实现。VTK立即抛出一个错误“无法分配大小为8字节的[大量]元素”。这使我相信我的内存管理不足(不存在)

我读过 VTKStaskPosith,但似乎只能找到C++的解释。如何在python中正确使用

vtkSmartPointer
?我应该补充说,我对C++没有任何经验。

由于程序的大小,MWE是不可能的。以下是我的算法管道的一部分的简化示例:

import vtk

appendFilter = vtk.vtkAppendPolyData()

    # create all 12 struts and combine them into one object
    for i in range(1, 13, 1):
        tf = create_strut(i, node_dist, amp, d, sides, mode, render=False)  # method that creates my unit cell out of 12 struts, parameters are irrelevant
        appendFilter.AddInputData(tf.GetOutput())
        appendFilter.Update()

    # clean up poly data 
    cleanFilter = vtk.vtkCleanPolyData()
    cleanFilter.SetInputConnection(appendFilter.GetOutputPort())
    cleanFilter.Update()

    # cut the cell to its right size
    planes = plane_collection(node_dist)  # method that generates 6 planes
    clip = vtk.vtkClipClosedSurface()
    clip.SetInputData(cleanFilter.GetOutput())
    clip.SetClippingPlanes(planes)
    clip.Update()

    # assemble an array from the unit cell
    array = duplicate_cells(clip, xyz[0], xyz[1], xyz[2], node_dist)

    # save as .stl
    data = array.GetOutputPort()
    stlwriter = vtk.vtkSTLWriter()
    stlwriter.SetInputConnection(data)
    stlwriter.SetFileName("Z:/example.stl")
    stlwriter.Update()
    stlwriter.Write()

这应该说明我使用了很多过滤器,从不关心删除它们或任何东西。清理内存的正确/首选方法是什么?

自从我发布这篇文章以来,我读了很多关于VTK和Python的文章,得出结论,Python自己负责内存管理。StaskPosits和DeleTeE()只在C++环境中是必需的。 此外,我从Python2.7和VTK6.2升级到Python3.4和VTK7.0,这大大提高了程序的整体性能。因此,我认为问题在于旧的VTK版本