vtk使用越来越多的内存并变得缓慢。

时间:2014-05-23 10:36:34

标签: c++ vtk

我在我的应用程序中遇到了内存泄漏并将其固定下来 与vtk相关的东西。我在Windows 7上使用vtk 6.1.0,使用64位的Visual Studio 2012。

我遇到了更多vtk算法的行为。 绝对不是操作系统与内存相关,而是vtk。似乎每次调用update vtk都会创建对象并将它们放入一种更新队列中,最后不会删除。请考虑以下代码:

#include <vtkImageConstantPad.h>
#include <vtkImageData.h>
#include <ctime>

int main(int argc, char *argv[])
{
    int c=0;
    clock_t start;
    size_t iterations = 1000;
    while (c != '.'){
         c = getchar();
         start = clock();
         for(size_t i=0; i<iterations; ++i){
             vtkImageConstantPad* pad = vtkImageConstantPad::New();
             vtkImageData* test = vtkImageData::New();
             test->SetExtent(0,1,0,1,0,1);
             test->AllocateScalars(VTK_FLOAT,1);
             pad->SetInputData(test);
             pad->SetOutputWholeExtent(0,2,0,2,0,2);
             pad->Update(); //this is what makes it bad
             pad->Delete();
             test->Delete();
         }
         std::cout << "Time for " << iterations << ": " << static_cast<double>(clock() - start) / CLOCKS_PER_SEC << "sec" << std::endl;
    }
    return 0;
}

我的输出是:

Time for 1000: 0.816sec
Time for 1000: 1.879sec
Time for 1000: 3.454sec
etc.

因此,每次调用update()会消耗更多内存和更多时间,尽管for循环范围中的所有对象都会被销毁。任何人都可以在其他平台上确认这一点,或者知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

经过进一步调查后,我发现所有机器上都没有出现此问题。 最后,我发现我的Bitdefender Antivirus在某种程度上搞乱了该程序并导致了这种奇怪的行为。当我关闭它时,一切都按预期工作。