お世話になります。
ProgressBarの下に進捗表示のためArray.Sortのソート条件Comparison<T>を何回通ったかを取得したいのですが、
ComparsionASCの引数に呼び出し元のFormを追加して、カウント値を適宜更新するようなことを考えましたが、
そもそもComparsionASCにはもう引数を追加できませんでした…なにかいい方法はないでしょうか。
c#
1//呼び出し元 2FormCommon common = new FormCommon(); 3 4public void Hoge(){ 5 Array.Sort(Array, common.ComparsionASC); 6} 7 8 9//呼び出されたComparsion 10public int ComparsionASC(string fileX, string fileY) 11{ 12 DateTime datetimeX = GetFileCreateOrRenovationDateTime(fileX); 13 DateTime datetimeY = GetFileCreateOrRenovationDateTime(fileY); 14 15 return DateTime.Compare(datetimeX, datetimeY); 16}
進捗といいますが、何回で終了するかわからないのではカウントしても意味がないのでは?
進展表示のためということですが、ソートするために比較関数が何回呼ばれるかは不定です。
ですから、目的となる回数を概算で求め、終了時に調整する必要があります。
また要素数がちょっとやそっとの量では進展率の表示をしなければならないほどの時間はかかりません。逆に入れるだけ遅くなって損ということにもなりかねません。
また、比較関数の効率が非常に悪いように見えます。何度も繰り返し文字列をパースしているので、この場合は LINQ を使って工夫すれば劇的に速くなる可能性もあります。
x_xさん
インクリメントのスピードでどのくらいのペースで処理が進んでいるかが視覚的にわかればいいなと思っています。
プログレスバー自体はMarqueeです。
Zuishinさん
string fileX, string fileYにはArrayに格納されている写真ファイルのパスが渡されてきていて、
撮影日・撮影日が無ければファイル更新日時をそれぞれ取得して比較しています。
比較するファイル数は2,3M程度のファイルが1000枚程度です。
不勉強で申し訳ないのですがLINQでは上記のどこからどこまでをカバーすることができるのか教えていただけないでしょうか。
各要素についてキーとなる日時を一度だけ作成する仕様になっていますから、完全にカバーできると言えます。
単位時間あたりの比較回数を通知したところで
それが速いのか遅いのかもわからないし、ソートが後どのぐらいで終わるのかもわからないので
ソートに時間がかかるのであれば処理中かどうかだけ示せばいいと思うんですが。
回答3件
あなたの回答
tips
プレビュー