/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="datafile"></param> /// <param name="offset"></param> /// <param name="tid"></param> /// <param name="dataTimes"></param> /// <param name="type"></param> /// <param name="res"></param> public static void Read <T>(this DataFileSeriserbase datafile, long offset, int tid, List <DateTime> dataTimes, QueryValueMatchType type, HisQueryResult <T> res) { int timetick = 0; var data = datafile.ReadTagDataBlock2(tid, offset, dataTimes, out timetick); foreach (var vv in data) { var index = vv.Value.Item2; DeCompressDataBlockValue <T>(vv.Key, vv.Value.Item1, timetick, type, res, new Func <byte, object>((tp) => { object oval = null; int ttick = 0; int dindex = index; if (tp == 0) { //往前读最后一个有效值 do { dindex--; if (dindex < 0) { return(TagHisValue <T> .Empty); } var datas = datafile.ReadTagDataBlock(tid, offset, dindex, out ttick); if (datas == null) { return(null); } oval = DeCompressDataBlockRawValue <T>(datas, 0); }while (oval == null); } else { //往后读第一个有效值 do { dindex++; if (dindex > 47) { return(TagHisValue <T> .Empty); } var datas = datafile.ReadTagDataBlock(tid, offset, dindex, out ttick); if (datas == null) { return(null); } oval = DeCompressDataBlockRawValue <T>(datas, 1); }while (oval == null); } return(oval); })); } foreach (var vv in data) { vv.Key.Dispose(); } data.Clear(); }
/// <summary> /// /// </summary> /// <param name="datafile"></param> /// <param name="offset"></param> /// <param name="tid"></param> /// <param name="startTime"></param> /// <param name="endTime"></param> /// <param name="result"></param> public static void ReadAllValue <T>(this DataFileSeriserbase datafile, long offset, int tid, DateTime startTime, DateTime endTime, HisQueryResult <T> result) { //Stopwatch sw = new Stopwatch(); //sw.Start(); foreach (var vv in datafile.ReadTagDataBlock2(tid, offset, startTime, endTime)) { DeCompressDataBlockAllValue(vv.Item1, vv.Item2, vv.Item3, vv.Item4, result); vv.Item1.Dispose(); } //sw.Stop(); //Debug.WriteLine("Read all value:" + sw.ElapsedMilliseconds + " file:" + datafile.FileName); }