Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

メモリリーク? #250

Closed
kmycode opened this issue May 6, 2024 · 4 comments
Closed

メモリリーク? #250

kmycode opened this issue May 6, 2024 · 4 comments
Labels
Milestone

Comments

@kmycode
Copy link
Owner

kmycode commented May 6, 2024

長時間使っているとメモリ使用量5GB超えはさらです

心当たり

  • 別のウィンドウを開いて閉じたタイミングで解放忘れ
@kmycode kmycode added bug Something isn't working priority-high app labels May 6, 2024
@kmycode kmycode added this to the 5.0.0 milestone May 6, 2024
@kmycode
Copy link
Owner Author

kmycode commented May 9, 2024

image

FinderModel内でこのSubscribeを破棄するようにしました(破棄しないとFinderModel自身がメモリに残っちゃうかも)

@kmycode kmycode added duplicate This issue or pull request already exists cost-high and removed duplicate This issue or pull request already exists labels May 10, 2024
@kmycode kmycode modified the milestones: 5.0.0-alpha, 5.0.0-beta May 15, 2024
@kmycode
Copy link
Owner Author

kmycode commented May 17, 2024

よく考えたら、単にメモリリークしただけでアプリの動作が重くなるとは考えづらいので、どこかに変なループが入っているかもしれないです

@kmycode kmycode modified the milestones: 5.0.0-beta, 5.0.0-alpha May 19, 2024
@kmycode
Copy link
Owner Author

kmycode commented May 19, 2024

2330751
eb7b82f
2707097
4e995dd

これらコミットの結果、50以上のレースを開いてもメモリ使用量は1GB未満のままになったことが確認された
まだわずかにRAM使用料が増える兆候はあり、拡張メモまわりなど気になる箇所はあるものの、メモリリークを取り扱う一連の問題としてはクローズで問題ないと思う

1つのコミットで一度に複数箇所を修正したため直接的な原因は不明だが、上記の最後のコミット適用後劇的に改善されたため、そのコミットの中の心当たりはというと

  • MemoConfigItemクラスのPointプロパティはIDisposableであったが、そのDisposeを呼び出しておらず、しかもMemoConfigItem自体がIDisposableを実装していなかった
  • HorseBloodInputCategoryクラスのHorseBloodプロパティの破棄忘れ
  • RaceFinderCopyFromが実質的に新しいIDisposableオブジェクトを生成するうえに、そのオブジェクトを破棄しないまま戻り値として返すことすらない状態だった
  • HorseMarkModelの破棄忘れ

メモ:今回行ったメモリリークの探し方

  • eventで単語検索して出てきたイベントの消し忘れを探す
  • SubscribeToReactivePropertyToReadOnlyReactivePropertyDispose呼び出し忘れを探す
  • void Disposeで検索して出てきたDisposeメソッドのあるクラスのコンストラクタを探して、さらにそのコンストラクタを呼び出している場所を探して、呼び出し元でオブジェクトが破棄されているかを調べる

@kmycode kmycode closed this as completed May 19, 2024
@kmycode
Copy link
Owner Author

kmycode commented May 19, 2024

分析画面の拡張メモ、馬グループとかを表示した状態でレースの切替を行うとメモリリークが発生する
WPF自体の問題もあるかもしれないので、継続調査が必要 #306

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant