Top  上へ  目次



何で無かったんだろう風味の機能



 今まで何故載せてなかったの?風味の機能を取り上げてみます。
 とりあえず列挙してますが、Ver.6で全部できるはずも無く、かなり長いスパンで考えるネタも含んでますです。
 他にもあったら指摘してください。



・フォルダーバーでALT+Enterでプロパティ表示
 Windows7のエクスプローラーは、この動作しませんけどね・・・

・ユーザー定義バーでALT+Enterで設定画面表示
 プロパティ表示でも良いかと思いましたが、やることは設定なので種類の自動判定して設定画面を表示する

・リストの未選択状態のコンテキストメニューで設定画面
 「このフォルダのカスタマイズ」的な設定画面

・リストの選択状態のコンテキストメニューで使われる想定だった機能
 「選択中のアイテムのパスを開く」で、.lnkファイルの先とか開けたら便利だなと思ってメニューにおいてみましたが、このコマンドはリンクの先を見ていませんね・・・。
 うーん、リンク先がネットワークだったりしたら激遅になっちゃうんですが、参照した方が便利なので機能変更しましょう。

・ウィンドウ管理バー
 ドライブでまとめるだけではなく、そもそもフルパスで比較すれば位置の近いフォルダがまとめられるので便利なのでは?

・ツリータイプのお気に入り
 原理はツリー上にあるアイテムをクリックすると、シェル起動か、新しく開くが発動する系。
 スクリプトじゃないんで、lnk以外は全てシェル起動という扱いで、新型フォルダーバーならではの使い方の一種。
 雰囲気は、Windows10のピン止めに近いかも。

・自前実装の右クリックメニューのデザインが違うものが1個だけある
 タブバー上での右クリックメニューです。
 実はこのポップアップメニューですが、基底クラスがCWndの通常ウィンドウを用いたシロモノなんです。
 メニューじゃないんで、タイトルバーとか、コメントとか、.NET Framewokで使われるメニューなどのように付与することができます。
 共通化したいんですが、メニュー系の機能全てが巻き込まれる大惨事になるので、二の足を踏み踏み。




 ここから、わりと学術的なテーマで、表には出てこないアーキテクチャの世界です。
 別名、自己満足の世界とも言えます。
 まぁ、研究テーマみたいなモノの殴り書きみたいなものです。どうせ簡単に実現できませんし。


・各種ソート
 現在は改良型のマージソートで並列処理をしてません。
 今よりも理論上は並列化して、4コアならほぼ倍速になる計算だけど、COMを用いた比較計算が各スレッドで保証されないので困ったことになります。
 要するに自前の高速ソートと、シェル由来のソートで、ソート処理そのものを使い分ければ、大幅に速度が引き上げられるケースが生まれてきます。
 あと、初期の頃に使ってた並列処理のクイックソートより、ギリギリまでチューニングしたマージソートの方が速いって何の冗談かと思いますが、スレッド生成のオーバーヘッドで伸び悩んでしまうのが原因です。
 単純な並列化ではなく、スレッドのリソース管理も考えないとダメなので悩ましい所です。

 まぁ、普通のC言語のqsort()と比べたら、古い方式でも50倍くらい速いんですがね・・・。
※クイックソートはどんなファイル名を、どのように並び替えるかで最悪ケースの組み合わせが必ず出るので、トータルすると平均して速いマージソートの方が良い成績が出る場合があるという数学と分布論的な話もあります


・スレッドプールのような、スレッドを再利用/上限を管理する仕組みの導入
 現在は、スレッドを使い捨てにしています。
 これは投機的にスレッドを生成して「みんな終わったら進みましょう」というというような流れになっています。
 まぁ、典型的なOpenMPライブラリの使い方なんですがね。
 だけどスレッドは、スレッドそのものを生成するのに最も時間がかかるので、スレッドを再利用する仕組みを導入した方が賢明なのは周知の事実です。

 アイコンやサムネイル画像を取得する系の処理など、速度が要求される箇所も複数のスレッドを走らせて処理結果を使うかどうかも定かではない投機的な処理をしている箇所には影響が大きいです。
 各種のバックグラウンドのファイル処理には生成/破棄の負荷は関係ないけど、ディスクI/Oがあまりにも増えたら逆に遅くなるケースもあるので、これらを抑制すると言った使い道もあるでしょう。(例:シーケンシャルリード/ライトを並列で動かしたら、お前は既にシーケンシャルじゃねぇという話)
 そうそう、上のソートの並列化等を考える場合も欠かせない概念ですね。


・コンポーネントスタック
 主にプレビュー用で、コンポーネントを使い終わったら即座に開放するのではなく、保持して使いまわす。
 開放のタイミングは、一定期間保持し(OSのデフォルト値は10分)、OSのガベージコレクションによる制御をおこなう。
 でも、Windowsのメモリ管理ってオバカですよ?
 あと、すげぇ行儀の悪い動作をするExcelをどーすんだ問題もあります。
 (アプリの終了時にExcelのコンポーネントを取得していたら終了時に10秒ウェイトをかけるとか、そういう嫌すぎるカラクリが必要)

 あと、各種バーって1回表示させると、ずっとメモリ上に居座ります。
 これ、非表示にして一定時間たったら開放したいですね。