Geiger10その2
2013年6月6日
グラフ表示を変えた。
データだけ件数表示しても、同じような値が並んでるだけなので、
日付・時間ごとのデータの推移がわかるように。。
↓変更前、変更後
これだと、データ取得した日付がわかりやすい。( ‘-‘ )( ,_, )( ‘-‘ )( ,_, ) うんうん
あまりデータ測定できてないんだな・・・サーバー作り直したので、飛んだ分もあるしな・・・・まぁ、これから貯めていくとして。。。
しかし、1000件表示でも異常に遅い。
サムネ選択して次ページに詳細を表示するようにした。
これも、遅いな。
表示データ量によるんだけど。戻るボタンで、再描画時はプロットしないようにはしてるんだが、初回プロットがなんせ遅い。オセェヨ( ゚д゚)、ペッ
1時間毎のデータを一か月分表示すると、24×31=744件。
サマリーは、300件くらいをデフォルトで十分かな。日ごとの推移なので、100件でもいいな。
ソース↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// グラフ DateTime firstDay = new DateTime(Int32.Parse(_datas[0].Key.Substring(0, 4)), Int32.Parse(_datas[0].Key.Substring(5, 2)), 1, 0, 0, 0); DateTime lastDay = new DateTime(Int32.Parse(_datas[0].Key.Substring(0, 4)), Int32.Parse(_datas[0].Key.Substring(5, 2)), daysCount, 23, 59, 59); TimeSpan span = lastDay - firstDay; float minuteSpan = (float)span.TotalMinutes / (float)DataCount; var drawAction = new Action<PathGeometry1, IList<NameValueItem>>((pathGeometry, drawDatas) => { int darawDatasCount = 0; using (var pathSink = pathGeometry.Open()) { for (int i = 0; i < DataCount; i++) { DateTime stepDateTime = firstDay.AddMinutes(i * minuteSpan); var dateDatas = drawDatas.Where(x => Int32.Parse(x.Key.Substring(8, 2)) == stepDateTime.Day && Int32.Parse(x.Key.Substring(11, 2)) == stepDateTime.Hour && Int32.Parse(x.Key.Substring(14, 2)) == stepDateTime.Minute).FirstOrDefault(); if (dateDatas != null) { if (darawDatasCount == 0) pathSink.BeginFigure(new DrawingPointF(leftMarginX + intervalX * (float)(i), (sizeY - bottomMargin) - intervalY * dateDatas.Value), FigureBegin.Hollow); DrawingPointF pointData = new DrawingPointF(leftMarginX + intervalX * (float)(i), (sizeY - bottomMargin) - intervalY * dateDatas.Value); pathSink.AddLine(pointData); darawDatasCount++; } } pathSink.EndFigure(FigureEnd.Open); pathSink.Close(); } }); |
横軸を、表示件数で割って、分毎のオフセットでデータ拾ってるんだけど。。。こりゃ遅いわな・・・
今更ながらラムダはスゲー楽だよなぁ。
表示処理の高速化は、ボチボチ改造しよう。