3

2013 年 3 月 27 日更新

私はメモリをリークしていないように見えます.F5が押されるか、新しいユーザーが接続するたびにWTが永続的なセッションを維持していないだけです. 基本的に、古いセッションは削除され、F5 キーを押すか、新しいユーザーが別のマシンから接続するたびに新しいセッションが作成されます。セッションを永続的にすることについて言及しているドキュメントの一部を読んだので、ユーザーがページをリロードしたり、別のユーザーが接続したりすると、すべて同じコンテンツが表示されます。しかし、私はまだそれを機能させることができませんでした。関数呼び出しかwt_config.xmlファイルの設定だと思います。他に進展があれば更新します。

元の投稿

だから私の質問は、どのように WT でメモリをクリーンアップして、ユーザーがページで F5 を押すたびにタスク マネージャーでメモリ使用量が同じになるようにするかということです。

わかりましたので、私は WT 発音 (機知に富んだ) で作業しています。ユーザーがページで F5 キーを押してページを更新するたびに、サーバー アプリケーションがより多くのメモリを消費することに気付きました。これは、メモリ リークしているように見えますが、 WTの最も基本的なアプリケーションと同じプロセス...

そこで、私が見つけることができる最も基本的な WT アプリに戻りました。Hello アプリケーションのコードと実際のサンプルは、ここ ( http://www.webtoolkit.eu/wt/examples/ ) にあります。プロジェクトを個人的に構築していません。

マシンで例を実行し、ページで F5 キーを押すと、タスク マネージャーのメモリが増加しました。

私の可能性が高いのは、以下のこの関数です。

WApplication *createApplication(const WEnvironment& env)
{
  /*
  * You could read information from the environment to decide whether
  * the user has permission to start a new application
  */
  return new HelloApplication(env);
}

F5 が押されるたびに呼び出され、WApplication を継承する HelloApplication の新しいインスタンスを作成します。

うまくいかなかった状況を改善しようとしたいくつかのことは次のとおりです。 HelloApplication の 2 つのポインターを保持して、新しいポインターが割り当てられるたびに古いポインターを削除できるようにします。quit() 関数を呼び出し、ポインターを削除します。quit() 関数を呼び出すだけです。クラスとそのメソッドの詳細については、WT ドキュメント サイト ( http://www.webtoolkit.eu/wt/doc/reference/html/index.html ) も調べましたが、思いつきませんでした。うまくいったもの。

回答者の方は、メモリのクリーンアップの処理方法をできるだけ詳しく教えてください。例をいただければ幸いです。事前に感謝します。

4

2 に答える 2

2

また、Wt 3.3.0 の時点では、リクエストが受信されている間だけセッションがクリーンアップされるという事実にも注意する必要があります ( Wt 開発者のこの返信を参照してください)。この制限を克服するために、開発者は次のコードに似たものを使用することを提案しています。

static bool terminating = false;

void
callRepeatedly(boost::function<void()> function, int seconds)
{
    if (!terminating) {
        Wt::WServer::instance()->ioService().schedule(
            seconds * 1000, boost::bind(callRepeatedly, function, seconds));
    }
    function();
}

int
main(int argc, char** argv)
{
    ...

    callRepeatedly(boost::bind(&Wt::WServer::expireSessions, &server), 60);
    Wt::WServer::waitForShutdown();
    terminating = true;
    server.stop();

    ...
}
于 2013-08-22T13:30:58.153 に答える
0

WApplication のマニュアルには、createApplication コールバックが呼び出されたときに作成し、quit が呼び出されてセッションがタイムアウトしたときに Wt がそれを削除すると書かれています。デフォルトのセッション タイムアウトは 10 分 (wt_config.xml) であるため、F5 キーを押したときに最初にメモリ消費量が増加するのはそのためかもしれません。

http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WApplication.html#details

あなたが見ていることを説明する別の何か: オペレーティング システムによって報告されたメモリ消費量は、アプリケーションがメモリ リークを起こしているかどうかを判断するための信頼できる方法ではありません。valgrind などの適切なメモリ チェック ツールを使用します。

于 2013-03-06T13:55:12.530 に答える