public MultiThreadedStrategy(ILogMedia media, Encoding encoding, IRegex headerRe, MessagesSplitterFlags splitterFlags, TextStreamPositioningParams textStreamPositioningParams, string parentLoggingPrefix, ITraceSourceFactory traceSourceFactory) : this(media, encoding, headerRe, splitterFlags, false, textStreamPositioningParams, parentLoggingPrefix, traceSourceFactory) { BytesToParsePerThread = GetBytesToParsePerThread(textStreamPositioningParams); }
public MessagesSplitter(ITextAccess textAccess, IRegex messageHeaderRe, MessagesSplitterFlags flags = MessagesSplitterFlags.Default) : base() { if (textAccess == null) { throw new ArgumentNullException(nameof(textAccess)); } if (messageHeaderRe == null) { throw new ArgumentNullException(nameof(messageHeaderRe)); } if ((messageHeaderRe.Options & ReOptions.RightToLeft) != 0) { throw new ArgumentException("Header regular expression must not be RightToLeft"); } if (textAccess.MaximumSequentialAdvancesAllowed < 3) { throw new ArgumentException("ITextAccess implementation must allow 3 or more sequential advances", "textAccess"); } this.textAccess = textAccess; this.forwardModeRe = messageHeaderRe; this.bufferLengthThreshold = 0; if ((flags & MessagesSplitterFlags.PreventBufferUnderflow) != 0) { this.bufferLengthThreshold = textAccess.AverageBufferLength / 4; } }
public MessagesSplitterFlags GetHeaderReSplitterFlags() { var headerRe = this; MessagesSplitterFlags ret = MessagesSplitterFlags.None; if (headerRe.SuffersFromPartialMatchProblem) { ret |= MessagesSplitterFlags.PreventBufferUnderflow; } return(ret); }
internal MultiThreadedStrategy(ILogMedia media, Encoding encoding, IRegex headerRe, MessagesSplitterFlags splitterFlags, bool useMockThreading, TextStreamPositioningParams textStreamPositioningParams, string parentLoggingPrefix, ITraceSourceFactory traceSourceFactory) : base(media, encoding, headerRe, textStreamPositioningParams) { if (parentLoggingPrefix != null) { this.tracer = traceSourceFactory.CreateTraceSource("LogSource", string.Format("{0}.mts_{1:x4}", parentLoggingPrefix, Hashing.GetShortHashCode(this.GetHashCode()))); } this.streamDataPool = new ThreadSafeObjectPool <Byte[]>(pool => { var ret = new Byte[BytesToParsePerThread]; tracer.Info("Allocating new piece of stream data: {0:x8}", ret.GetHashCode()); return(ret); }); this.outputBuffersPool = new ThreadSafeObjectPool <List <PostprocessedMessage> >(pool => { var ret = new List <PostprocessedMessage>(1024 * 8); tracer.Info("Allocating new output buffer: {0:x8}", ret.GetHashCode()); return(ret); }); this.useMockThreading = useMockThreading; this.splitterFlags = splitterFlags; }
internal MultiThreadedStrategy(ILogMedia media, Encoding encoding, IRegex headerRe, MessagesSplitterFlags splitterFlags, bool useMockThreading, TextStreamPositioningParams textStreamPositioningParams) : base(media, encoding, headerRe, textStreamPositioningParams) { this.streamDataPool = new ThreadSafeObjectPool <Byte[]>(pool => { var ret = new Byte[BytesToParsePerThread]; tracer.Info("Allocating new piece of stream data: {0}", ret.GetHashCode()); return(ret); }); this.outputBuffersPool = new ThreadSafeObjectPool <List <PostprocessedMessage> >(pool => { var ret = new List <PostprocessedMessage>(1024 * 8); tracer.Info("Allocating new output buffer: {0}", ret.GetHashCode()); return(ret); }); this.useMockThreading = useMockThreading; this.splitterFlags = splitterFlags; }
public MultiThreadedStrategy(ILogMedia media, Encoding encoding, IRegex headerRe, MessagesSplitterFlags splitterFlags, TextStreamPositioningParams textStreamPositioningParams) : this(media, encoding, headerRe, splitterFlags, false, textStreamPositioningParams) { BytesToParsePerThread = GetBytesToParsePerThread(textStreamPositioningParams); }
public SingleThreadedStrategy(ILogMedia media, Encoding encoding, IRegex headerRe, MessagesSplitterFlags splitterFlags, TextStreamPositioningParams textStreamPositioningParams) : base(media, encoding, headerRe, textStreamPositioningParams) { this.textSplitter = new ReadMessageFromTheMiddleProblem(new MessagesSplitter(new StreamTextAccess(media.DataStream, encoding, textStreamPositioningParams), headerRe, splitterFlags)); }