2017-10-24 92 views
0

Halcon演算子find_model_shapeをC#で使用すると問題があります。 Halconが示すようにclear_shape_modelを使用していても、この演算子が占有するメモリを解放することはできません。C#でHalconアルゴリズムfind_shape_modelを使用しているときにメモリを解放できません

より複雑な形状探索パラメータを設定すると、find_shape_modelが占めるメモリが大きいようです。

この演算子を使用した後でメモリを解放する方法を知りたいだけです。

private void button1_Click(object sender, EventArgs e) 
    { 
     HTuple hv_ModelId = null; 
     HTuple hv_ModelRow = null; 
     HTuple hv_ModelColumn = null; 
     HTuple hv_ModelAngle = null; 
     HTuple hv_ModelScore = null; 
     HObject ho_Image = null; 


     HOperatorSet.GenEmptyObj(out ho_Image); 
     ho_Image.Dispose(); 
     HOperatorSet.ReadImage(out ho_Image, "0.bmp"); 
     HOperatorSet.SetSystem("border_shape_models", "false"); 
     HOperatorSet.ReadShapeModel("0.shm", out hv_ModelId); 

     HOperatorSet.FindShapeModel(ho_Image, hv_ModelId, 0, 
      3.14, 0.75, 0, 0.5, "least_squares", 6, 0.75, out hv_ModelRow, 
      out hv_ModelColumn, out hv_ModelAngle, out hv_ModelScore); 

     hv_ModelRow = null; 
     hv_ModelColumn = null; 
     hv_ModelAngle = null; 
     hv_ModelScore = null; 

     ho_Image.Dispose(); 
     HOperatorSet.ClearShapeModel(hv_ModelId); 
     hv_ModelId = null; 
    } 

Memory before/after using find_shape_model

答えて

1

あなたが機能を使用して、正しく形状モデルをクリアしているように見えます:

HOperatorSet.ClearShapeModel(hv_ModelId);

あなたはメモリが解放されていませんか? メモリをクリアした後に同じ形状モデルを再度読み取るとどうなりますか?

HOperatorSet.ReadShapeModel("0.shm", out hv_ModelId);

私はメモリが影響を受けないことを賭けるだろう。基本的にメモリの管理方法は、お使いのOSによって異なります。お使いのOSは、メモリが再び使用されることが予想されるため、すぐに他のプロセスにメモリを与えることはできません。

好奇心をそらして:あなたはどのOSを使用していますか、スクリーンショットでグラフをどのように生成しましたか?

+0

私はWindows 10を使用しています。スクリーンショットのグラフは、Visual Studioの診断ツールからのものです。 –

+0

メモリがOSによって管理されている可能性があることに私は同意します。しかし、この場合、halconはこの演算子を実行するときにより多くのメモリが必要になる可能性が高いはずです。私は、同時に複数の画像を処理するために複数のスレッドを使用する別のテストを行い、占有されたメモリが増加しました。私のテストでは、1.1Gが天井かもしれません。だから多分このオペレータはもっと多くのリソースを必要とし、それには限界があります。 –

+0

私のプロジェクトでは、ロバスト性を保証するために大きなメモリを使用する必要があると思います。 –

関連する問題