Exemple #1
0
        private void Enqueue(ISqlLogItem item)
        {
            lock (_queue)
                _queue.Enqueue(item);

            _queueEvent.Set();
        }
Exemple #2
0
        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);
                }
            }
        }