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

[WIP] Fix large resnumber #30

Closed
wants to merge 5 commits into from
Closed

[WIP] Fix large resnumber #30

wants to merge 5 commits into from

Conversation

ma8ma
Copy link
Owner

@ma8ma ma8ma commented Mar 13, 2019

@taro-yamada 氏の長大なスレッド(>11000レス?)を開くと落ちる不具合を修正するの修正v1( https://github.com/taro-yamada/JDim/tree/41306cfb )に2つの変更を追加します。

  • しおりなどレス情報を保持するコンテナ型を変更する
  • レス数の上限を1048576へ引き上げる

変更の内容 (コミットメッセージ)

[WIP] Use std::unordered_set instead of std::vector for res information

レス数の上限を取り除くためstd::vector<char>で管理しているしおりなどのレス情報をレス番号(int)をキーにしたstd::unordered_set<int>で管理します。unordered_setは初期化の際にkExpectedResInfo(=512)のサイズに予約します。

修正の根拠

しおり、書き込み、返信などのマークはレス数に対して十分少なくなるはずです。したがってstd::vectorでレス数と同じサイズの領域を確保する必要性は低いと考えられます。

パフォーマンスの影響

挿入時にハッシュ計算(レス番号=int)のコストがかかります。また、最悪の場合ハッシュの再計算やメモリの再確保が発生します(kExpectedResInfoで調整可能)。レス番号の順序が必要な箇所がありますが実行される条件は限られているのでstd::set<int>の一時変数を使っています。

[WIP] Eliminate MAX_RESNUMBER

MAX_RESNUMBERを取り除いてレス数の上限を1048576(2の20乗)に引き上げます。
合わせて7桁までのレスアンカーを有効にします。
また、レス番号を表現する符号付き整数はsizeof(int) >= 4以上を要件とします。

新たに導入する定数
  • kMaxResNumber は設定可能な最大レス数(=1048576) : 設定の上限に使われる
  • kExptectedResNumber は最大レス数の想定値(=11000) : メモリ確保に使われる

長大なスレッド(>11000レス?)を開くと落ちる不具合を修正する](https://github.com/JDimproved/JDim/projects/1#card-18008854

EDIT: レス番号へ移動が動作しない問題を修正する
レス数の上限を取り除くためstd::vector<char>で管理しているしおりなど
のレス情報をレス番号(int)をキーにしたstd::unordered_set<int>で管理する。
unordered_setは初期化の際にkExpectedResInfo(=512)のサイズに予約する。

修正の根拠
しおり、書き込み、返信などのマークはレス数に対して十分少なくなるはず。
したがってstd::vectorでレス数と同じサイズの領域を確保する必要性は低い。

パフォーマンスの影響
挿入時にハッシュ計算(レス番号=int)のコストがかかる。また、最悪の場合
ハッシュの再計算やメモリの再確保が発生する(kExpectedResInfoで調整可能)。
レス番号の順序が必要な箇所があるが実行される条件は限られているので
std::set<int>の一時変数を使っている。
MAX_RESNUMBERを取り除いてレス数の上限を1048576(2の20乗)に引き上げる
合わせて7桁までのレスアンカーを有効にする
また、レス番号を表現する符号付き整数はsizeof(int) >= 4以上を要件とする

新たに導入する定数
kMaxResNumber は設定可能な最大レス数(=1048576) : 設定の上限に使われる
kExptectedResNumber は最大レス数の想定値(=11000) : メモリ確保に使われる
@ma8ma
Copy link
Owner Author

ma8ma commented Mar 22, 2019

"Use std::unordered_set instead of std::vector for res information"の修正版が JDimproved#61 でマージされました。部分的に修正されましたのでこのPRは閉じます。

@ma8ma ma8ma closed this Mar 22, 2019
@ma8ma ma8ma deleted the fix_large_resnumber branch March 22, 2019 14:43
@ma8ma ma8ma added the archive label Mar 22, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants