Editコントロールのメモリ使用量 – プログラミング – Home

Editコントロールのメモリ使用量
 
通知
すべてクリア

Editコントロールのメモリ使用量


YY
 YY
(@YY)
ゲスト
結合: 16年前
投稿: 1
Topic starter  

vc++2005 MFC Dialogベースで新規アプリを作成し、
最初にあるコントロールを全て削除して、
ダイアログにEditコントロールを作る。
これを、メンバ変数 CEdit m_Edit; として追加。

また、PreTranslateMessageを追加し、以下の処理にする。
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case VK_RETURN:
m_EnterKeyCount++; // .hにて定義したint型
(OnInitDialogで=0している)
if(m_EnterKeyCount == 1)
{
// Editの内容をクリアする
m_Edit.SetWindowTextA(_T("));
m_EnterKeyCount = 0;
}
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}

この状態でEditボックスに文字を入れていくと、
タスクマネージャで確認するとメモリ使用量が増える一方になっています。
増え続けてしまうのは何故なのでしょうか?

また、解決策として使った分のメモリを開放するには
どうしたらいいのか教えてください。よろしくお願いします。


引用解決済
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

> タスクマネージャで確認するとメモリ使用量が増える一方になっています。
> 増え続けてしまうのは何故なのでしょうか?

これに「正確に」答えられる人はいないでしょう。
以下は憶測です。
 エディットボックスは事実上無限回のUndo機能を持っています。
 Undo機能を実現するには行ったことを全て記憶しておかなければ
 なりません。このUndoのための情報は、文字の削除でも入力でも
 常に増加していきます。従って、操作をすればするほどメモリーを
 消費することになります。

> また、解決策として使った分のメモリを開放するには
> どうしたらいいのか教えてください。よろしくお願いします。

自分が確保したのでないメモリーを解放してはいけません。
つまり、ご指摘の現象に如何なる対策もしてはいけません。
(する方法もありません)


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

間違い修正。
「標準」エディットボックスのUndoは1回ですね。
リッチと間違えました。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 23年前
投稿: 1235
 

>m_EnterKeyCount++;
せっかく m_EnterKeyCount++;しているなら
ココカラ-------------------------
if(m_EnterKeyCount == 1)
{
// Editの内容をクリアする
m_Edit.SetWindowTextA(_T("));
m_EnterKeyCount = 0;
}
ココマデ----------------------------
の処理をタイマ-ルーチンに入れたほうがいいと思います。

PreTranslateMessage(MSG* pMsg)
等のルーチンではあまり処理をしないほうがいいです。
> if(m_EnterKeyCount == 1)
if(m_EnterKeyCount > 0)
のほうがいいですね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました