public void Dispose() { if (_cancellationTokenSource.IsCancellationRequested) { return; } _cancellationTokenSource.Cancel(); if (_dataStream == null) { return; } SafeExecute.Sync(() => { _dataStream.Flush(); _dataStream.Close(); }, false); }
private void SaveStatistics() { SafeExecute.Sync(() => { var stat = _statisticData.OrderBy(x => x.Key); var statistics = String.Format("{0,10} | {1,10}", "Process", "Count") + Environment.NewLine; statistics += new String('-', 24) + Environment.NewLine; foreach (var process in stat) { statistics += String.Format("{0,10} | {1,10}", process.Key, process.Value) + Environment.NewLine; } using (var statisticStream = new StreamWriter(StatisticFilePath, true, Encoding.UTF8, 65536)) { statisticStream.Write(statistics); statisticStream.Flush(); } }); }
private void DataProcess(CancellationToken cancellationToken) { var writeCount = 0; while (!cancellationToken.IsCancellationRequested) { if (!_dataFileQueue.TryDequeue(out var content)) { Thread.Sleep(DelayMilliseconds); continue; } if (_dataStream == null) { SafeExecute.Sync(() => _dataStream = new StreamWriter(DataFilePath, true, Encoding.UTF8, 65536)); } writeCount++; if (writeCount > 1000) { writeCount = 0; SafeExecute.Sync(() => _dataStream.Flush()); SafeExecute.Sync(() => _dataStream.Close()); _dataStream = null; GC.Collect(); SafeExecute.Sync(() => _dataStream = new StreamWriter(DataFilePath, true, Encoding.UTF8, 65536)); } try { _dataStream.Write(content); } catch (Exception ex) { Console.WriteLine(ex.Message); SafeExecute.Sync(() => _dataStream.Close()); SafeExecute.Sync(() => _dataStream = new StreamWriter(DataFilePath, true, Encoding.UTF8, 65536)); } } }