私は非常に興味深い発見に気づいた。私はカスタムソースのGUI要素を含むアプリケーションをテストしていましたが、これは外部ソースからのデータによって更新されていました。データは、シリアルポートに到着するたびにGUIの更新がスロット(Qtの具体的な内容)関数を用いて行きました。今やデータは1秒間に10パケットの割合で到着しており、すなわち、更新GUI機能は1秒間に10パケットと呼ばれている。これはアプリケーションの処理速度を低下させ、メモリ占有量を絶えず増加させる効果がありました。それは60 MBから始まり、数時間で65 MBに増加しました。C++/Qtメモリリーク?
私の結論は、GUIを更新するため、劣化のアプリケーションの応答時間遅いと更新用のスロットが10回秒と呼ばれたとき、スロットコールが長期的にキューイングされているということでした。
私が入ってくる値をキャッシュし、着信値の変化があるときにGUIを更新することでこの問題を解決しました。
私はvalgrind-memcheck、leak checkerのような様々なフリーツールを試しましたが、実際にはリークチェッカーはリークを見つけられませんが、私のプログラムのメモリサイズは絶えず増加しています。それは、GUIアップデートが本質的に遅いので、信号スロット接続のキューイングのためですか?
今ここで問題があります。メモリリークを追跡することは十分難しく、もしQtが関与しているとすれば、不運なプログラマが問題を確実にどうやって解決できるのですか?つまり、実際にメモリリークやシグナルスロット接続のキューイングですか?それは GUIの更新が本質的に低速であるとして、それが原因で、信号スロット接続の キューイングである
同じユーザーの可能性があるhttp://stackoverflow.com/questions/1186379/detecting-memory-leaks-in-c-qt-combine –
これは違うニールは、以前の質問は実際には事実上の記憶だった私のような多くの人がメモリサイズの増加がシグナルスロット接続の待ち行列に起因する可能性があることを知りませんので、この記事はこの問題を浮き彫りにしていました。 – rocknroll
ヴァルグリッドの大塊は何も与えていない? –