private void Enqueue(ISqlLogItem item) { lock (_queue) _queue.Enqueue(item); _queueEvent.Set(); }
private void Flush() { while (_queue.Count > 0) { ISqlLogItem[] array; lock (_queue) { array = new ISqlLogItem[_queue.Count]; _queue.CopyTo(array, 0); _queue.Clear(); } var sb = new StringBuilder(); for (var i = 0; i < array.Length; i++) { var item = array[i]; var commandText = item.CommandText; sb.Append(commandText); } var cmdText = sb.ToString(); long ticks = 0; try { var command = _connection.CreateCommand(); command.CommandText = cmdText; command.CommandTimeout = 259200; ticks = Stopwatch.GetTimestamp(); command.ExecuteNonQuery(); ticks = Stopwatch.GetTimestamp() - ticks; } catch (Exception e) { Log.Write(LogLevel.Error, e.ToString()); } finally { var seconds = (double)ticks / Stopwatch.Frequency; var speed = (int)(array.Length / seconds); Log.Trace( "SqlLog.Flush() called. Count: {0}, Elapsed: {1}, Speed: {2} item/sec\r\n{3}", array.Length, StopwatchTimeSpan.ToString(ticks, 3), speed, cmdText); } } }