{"action":"created","issue":{"url":"https://api.github.com/repos/anoyetta/ACT.SpecialSpellTimer/issues/48","repository_url":"https://api.github.com/repos/anoyetta/ACT.SpecialSpellTimer","labels_url":"https://api.github.com/repos/anoyetta/ACT.SpecialSpellTimer/issues/48/labels{/name}","comments_url":"https://api.github.com/repos/anoyetta/ACT.SpecialSpellTimer/issues/48/comments","events_url":"https://api.github.com/repos/anoyetta/ACT.SpecialSpellTimer/issues/48/events","html_url":"https://github.com/anoyetta/ACT.SpecialSpellTimer/pull/48","id":158508690,"number":48,"title":"[wip]パフォーマンス改善","user":{"login":"alalwww","id":2145323,"avatar_url":"https://avatars.githubusercontent.com/u/2145323?v=3","gravatar_id":"","url":"https://api.github.com/users/alalwww","html_url":"https://github.com/alalwww","followers_url":"https://api.github.com/users/alalwww/followers","following_url":"https://api.github.com/users/alalwww/following{/other_user}","gists_url":"https://api.github.com/users/alalwww/gists{/gist_id}","starred_url":"https://api.github.com/users/alalwww/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alalwww/subscriptions","organizations_url":"https://api.github.com/users/alalwww/orgs","repos_url":"https://api.github.com/users/alalwww/repos","events_url":"https://api.github.com/users/alalwww/events{/privacy}","received_events_url":"https://api.github.com/users/alalwww/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2016-06-04T15:09:25Z","updated_at":"2016-06-04T15:22:17Z","closed_at":"2016-06-04T15:18:37Z","pull_request":{"url":"https://api.github.com/repos/anoyetta/ACT.SpecialSpellTimer/pulls/48","html_url":"https://github.com/anoyetta/ACT.SpecialSpellTimer/pull/48","diff_url":"https://github.com/anoyetta/ACT.SpecialSpellTimer/pull/48.diff","patch_url":"https://github.com/anoyetta/ACT.SpecialSpellTimer/pull/48.patch"},"body":"かなり大きな修正となっています。ｽﾐﾏｾﾝ :bow:\r\n\r\n現在、実際に使ってみてエラーなどでないかテスト中ですが、先にPR作成しておきます。\r\n修正内容に指摘などあればコメント下さい、対応します。\r\n\r\n## 変更の概要\r\n1. パフォーマンス低下を起こしていた問題を修正しました。\r\nこの修正により、処理の遅延に引きずられてACT本体やFF本体にも影響が出ていた問題が修正されています。\r\n\r\n2. パフォーマンスを向上させました。\r\n環境依存で劇的な変更が出るほどではありませんが、並列処理を増やしたことで、よりパイスペックなパソコン上での処理速度の向上が見込めるようになりました。(たぶん…)\r\n\r\n3. `%appdata%\\anoyetta\\ACT\\` 以下に出力されるログファイル名に年月を加えました。\r\n  変更前 `ACT.SpecialSpellTimer.log`\r\n  変更後 `ACT.SpecialSpellTimer.2016-06.log`\r\n月次でローテートします。過去のログ削除機能はありません。\r\n\r\n\r\n## 詳細\r\n- 並列処理まわりの問題のあるコードを修正\r\n\r\n- ACT本体に登録したイベントハンドラ内でログ処理などを行わないように変更\r\n  - 受け取ったイベント引数をキューに詰めるだけの処理とした\r\n\r\n- ログ処理まわりのパフォーマンスの向上\r\n  - 等間隔のタイマーによるログ処理のため、前のログ処理が終わる前に次の処理が発生することがあり、ログの回収部分の同期をとっていることで前のタスクが完了するまで次のタスクがブロックされ、タスクが積まれて行ってしまっていたと思われる問題を修正\r\n    - ログが溜まっている間ループし処理し続けるスレッドを設け、タイマーを用いない実装とした\r\n  - 同期をとるためにlockし後続処理をブロッキングしていたコードのいくつかを非同期コレクションを用いるように変更\r\n  - スペルタイマー/テロップ/コマンドのマッチングそれぞれを並列で行うように変更\r\n  - スペルタイマー/テロップのログ1行毎に行う有効な設定とのマッチング処理を並列で行うように変更\r\n\r\n- `ACT.SpecialSpellTIemr.Utility.Logger#Write` に文字列フォーマットの機能追加\r\n- `ACT.SpecialSpellTIemr.Utility.Logger#Write` でブロッキングが発生しないよう変更\r\n  - 一旦キューイングしておき、UIスレッドでの更新処理でモニタータブへ、タイマーでファイルへ書き出すように変更した\r\n  - ファイル書き出しのリソース操作の前にロックしコード上で排他するようにした(念のため)\r\n- 異なる複数のスレッドから同時に呼び出される事が前提の実装へと修正\r\n- ログファイルへのの書き出しを5秒毎に行うように変更\r\n- ログファイルを月次でローテーションするように変更\r\n  - ファイルが大きくなりすぎた場合にパフォーマンス問題に繋がる可能性があるため、リセットされるようにするのが目的\r\n  - 通常日時にするほど大量のログは出ないため、月ごとにしています\r\n- モニタータブへのログの反映を必ずUIスレッドで行うように変更\r\n\r\n- その他、ごく僅かにパフォーマンス向上が見込める修正を追加\r\n  - モニタータブを表示していない場合はプレースホルダーの更新を停止するように変更\r\n  - TTSの再生をACT本体に委託する処理を非同期に実行するように変更\r\n  - パーティ変更があったかをログからチェックする判定を並列化\r\n  - ペットジョブ判定を最適化\r\n  - パーティメンバーの置換用プレースホルダーを定数化\r\n- ロジックの変更に伴うレアケースな不具合を修正\r\n\r\nまた、上記変更に伴う内部的な変更点として、 `ACT.SpecialSpellTimer.LogBuffer` クラスをはじめ、いくつかのクラスの公開メソッドやフィールド名の変更などのリファクタリングを行っています。\r\n(LogBufferクラスは多機能になりすぎているように思えるので機能分割も考えたのですが、目的がずれてしまうのとPRが大きくなりすぎるので、見送りました。 :persevere:)\r\n\r\nモニタータブの非選択時に更新を止める変更は、画面上に非表示でもタブが選択されている間は有効になりません。これは、想定済みの動作です。一度設定などを終えてしまえば、ACT起動後にプラグインの設定などを見ることはないと思うので、その際のパフォーマンスを僅かながら向上させることが目的です。"},"comment":{"url":"https://api.github.com/repos/anoyetta/ACT.SpecialSpellTimer/issues/comments/223761312","html_url":"https://github.com/anoyetta/ACT.SpecialSpellTimer/pull/48#issuecomment-223761312","issue_url":"https://api.github.com/repos/anoyetta/ACT.SpecialSpellTimer/issues/48","id":223761312,"user":{"login":"alalwww","id":2145323,"avatar_url":"https://avatars.githubusercontent.com/u/2145323?v=3","gravatar_id":"","url":"https://api.github.com/users/alalwww","html_url":"https://github.com/alalwww","followers_url":"https://api.github.com/users/alalwww/followers","following_url":"https://api.github.com/users/alalwww/following{/other_user}","gists_url":"https://api.github.com/users/alalwww/gists{/gist_id}","starred_url":"https://api.github.com/users/alalwww/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alalwww/subscriptions","organizations_url":"https://api.github.com/users/alalwww/orgs","repos_url":"https://api.github.com/users/alalwww/repos","events_url":"https://api.github.com/users/alalwww/events{/privacy}","received_events_url":"https://api.github.com/users/alalwww/received_events","type":"User","site_admin":false},"created_at":"2016-06-04T15:22:16Z","updated_at":"2016-06-04T15:22:16Z","body":"oh、なにか間違いがあったら…とおもってまだWIPのつもりだったけど、マージ済みに:( っ'ω'c):\r\n自分でビルドしたやつでしばらく使ってみて問題があったりしたら、またPRなげまっす。"}}
{"actor":{"display_login":"alalwww"}}