ピースペース

メモリリークするSilverlightビジネスアプリは簡単に作成できる!

with one comment

てか、作ってしまった。
ビジネスアプリテンプレートでナビゲーションするページは簡単に作れる。
で、ビジネスアプリで一般的な一覧→詳細なページを作る。
ページはナビゲーションで遷移させるので、詳細ページを表示する際にデータをパラメタとして引き渡ししたりすることはできない。
ので、表示するデータは共有の第3のオブジェクトに配置することになる。

ViewModelって言えるようなものでないが
一覧のGridにバインドするCollectionと、詳細のDataFormにバインドするEntityをそのVMもどきに配置する。
で、一覧ページのOnNavigatedで、DataGrid.ItemsSourceにそのVMに配置したCollectionをコードでひもつける。
これで、この一覧ページはメモリリークするようになる。
で、ページのUnLoadedで、そのひもつけをぶち切るようにしとけばメモリリークはしなくなる。
が、それだけではFreeにならないページもある。

なんで??
そのページは誰がつかんでるの?がわからない。
いずれにしても、ページがフリーにならない限りのそいつが参照しているVMもどきもフリーにならない。
そして、ページを移動するたびヒープは増え続ける。
てのは、ビジネスアプリとしては致命的。のような気がする。
あまりにも簡単にメモリリークしてしまいすぎる。困った。

Written by nasu38yen

2011年6月17日 @ 9:34 PM

カテゴリー: 未分類

コメント / トラックバック1件

Subscribe to comments with RSS.

  1. ナビゲーションするページ間でデータを共有するような設計をしなければいいのだ!
    ページとそれが使用するVMのライフサイクルは同じにする。
    一覧と詳細は同一ページに統合する。タブなどを使ってページが変わったように見せることはできる。
    でもまあ、RESTには反するのでおかしいと言えばおかしい。

    なす

    2011年7月4日 at 4:44 PM


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。