public static void ListLine() { //开始本次服务时间计算 Stopwatch st = new Stopwatch(); st.Start(); logger.Info("=====开始读取数据====="); try { if (File.Exists(path)) { using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { //获取上次文件流结束位置(若旧流位置大于新流长度则视为新文件,流位置初始化) RedisDal dal = new RedisDal(); long oldPosition = dal.GetFilePosition(); if (oldPosition > fs.Length) { fs.Position = 0L; } else { fs.Position = oldPosition; } //每100行文本创建一个线程,最后余量创建一个线程 using (StreamReader sr = new StreamReader(fs, Encoding.UTF8)) { string line = string.Empty; List <string> listStr = new List <string>(); List <Task> listTask = new List <Task>(); long length = fs.Length; while (true) { line = sr.ReadLine(); if (line != null) { if (listStr.Count == 100) { dal.SetFilePosition(fs.Position.ToString()); AnalyticalArithmetic anal = new AnalyticalArithmetic(); anal.listStr = listStr.ToList(); Task t = new Task(() => anal.AllFun(123)); listTask.Add(t); t.Start(); listStr.Clear(); } listStr.Add(line); if (fs.Position == length) { break; } } else { break; } } dal.SetFilePosition(fs.Position.ToString()); dal.Dispose(); if (listStr.Count > 0) { AnalyticalArithmetic analytickal = new AnalyticalArithmetic(); analytickal = new AnalyticalArithmetic(); analytickal.listStr = listStr.ToList(); Task tt = new Task(() => analytickal.AllFun(1)); listTask.Add(tt); tt.Start(); listStr.Clear(); Console.WriteLine(listTask.Count); Task.WaitAll(listTask.ToArray()); } } logger.Info("=====本次服务结束====="); } } //打印本次服务所用时间 st.Stop(); TimeSpan ts = st.Elapsed; logger.Info("本地服务使用时间:" + ts); } catch (Exception ex) { Console.WriteLine(ex); logger.Error("服务发生异常:" + ex); } }
/// <summary> /// 从指定位置 /// 获取一百行数据 /// </summary> /// <param name="path">文件路径</param> /// <returns></returns> public static void ListLine() { //开始本次服务时间计算 Stopwatch st = new Stopwatch(); st.Start(); logger.Info("=====开始读取数据====="); try { if (File.Exists(path)) { using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { //设置线程池中最多有20个线程 ThreadPool.SetMaxThreads(20, 20); //获取上次文件流结束位置(若旧流位置大于新流长度则视为新文件,流位置初始化) RedisDal dal = new RedisDal(); long oldPosition = dal.GetFilePosition(); if (oldPosition > fs.Length) { fs.Position = 0L; } else { fs.Position = oldPosition; } //每100行文本创建一个线程,最后余量创建一个线程 using (StreamReader sr = new StreamReader(fs, Encoding.UTF8)) { string line = string.Empty; List <string> listStr = new List <string>(); long length = fs.Length; while (true) { line = sr.ReadLine(); if (line != null) { if (listStr.Count == 100) { dal.SetFilePosition(fs.Position.ToString()); AnalyticalArithmetic anal = new AnalyticalArithmetic(); anal.listStr = listStr.ToList(); // ThreadPool.QueueUserWorkItem(new WaitCallback(anal.AllFun)); listStr.Clear(); } listStr.Add(line); if (fs.Position == length) { break; } } else { break; } } dal.SetFilePosition(fs.Position.ToString()); dal.Dispose(); AnalyticalArithmetic analytickal = new AnalyticalArithmetic(); analytickal = new AnalyticalArithmetic(); analytickal.listStr = listStr.ToList(); // ThreadPool.QueueUserWorkItem(new WaitCallback(analytickal.AllFun)); } logger.Info("=====本次服务结束====="); } } //打印本次服务所用时间 st.Stop(); TimeSpan ts = st.Elapsed; logger.Info("本地服务使用时间:" + ts); } catch (Exception ex) { logger.Error("服务发生异常:" + ex); } }