public void Split(int aSegmentCount) { int chunkSize = (int)iData.Length / aSegmentCount; int blockPosStart = 0; int length = 0; // for (int i = 0; i < aSegmentCount; i++) { int pos = 0; int blockPosEnd = Math.Min(iData.Length - 1, blockPosStart + chunkSize); while (pos >= 0) { pos = Array.IndexOf(iData, KPattern[0], blockPosEnd); if (pos > 0) { if (pos + 8 >= iData.Length) { break; } else if (pos + 8 < iData.Length && iData[pos + 7] == KPattern[7]) { bool isMatch = CompareByteArrays(KPattern, iData, pos); if (isMatch) { length = pos - blockPosStart; //System.Diagnostics.Debug.WriteLine( string.Format( "Block {0:d2} @ 0x{1:x8}, length: {2:d8}", i, blockPosStart, length ) ); // iSegments.Add(new SymbolFileSegment(this, blockPosStart, length)); blockPosStart = pos; break; } else { // Didn't find a match, move forwards blockPosEnd = pos + 1; } } else { // Didn't find a match, move forwards blockPosEnd = pos + 1; } } else { // Searched to end of file and didn't find another block, so just create // a new reader for everything that remains. length = iData.Length - blockPosStart; //System.Diagnostics.Debug.WriteLine( string.Format( "Block {0:d2} @ 0x{1:x8}, length: {2:d8}", i, blockPosStart, length ) ); iSegments.Add(new SymbolFileSegment(this, blockPosStart, length)); // break; } } } iCollectionIdentifier = new MultiThreadedProcessor <SymbolFileSegment>(this); }
private void ProblemDetectorManager_EventHandler(MultiThreadedProcessor <CIProblemDetector> .TEvent aEvent) { this.Trace("[CIEngine] ProblemDetectorManager_EventHandler() - START - aEvent: {0}", aEvent); // if (aEvent == MultiThreadedProcessor <CIProblemDetector> .TEvent.EEventStarting) { } else if (aEvent == MultiThreadedProcessor <CIProblemDetector> .TEvent.EEventCompleted) { iProblemDetectorManager.EventHandler -= new MultiThreadedProcessor <CIProblemDetector> .ProcessorEventHandler(ProblemDetectorManager_EventHandler); // Run any serialized operations iOperationManager.StateHandler += new CIEngineOperationManager.QueueStateHandler(OperationManager_StateHandler); iOperationManager.Start(); } // this.Trace("[CIEngine] ProblemDetectorManager_EventHandler() - END - aEvent: {0}", aEvent); }
protected override void OnEvent(MultiThreadedProcessor <SymbolFileSegment> .TEvent aEvent) { base.OnEvent(aEvent); // switch (aEvent) { case MultiThreadedProcessor <SymbolFileSegment> .TEvent.EEventStarting: iSource.ReportEvent(SymSource.TEvent.EReadingStarted); break; case MultiThreadedProcessor <SymbolFileSegment> .TEvent.EEventCompleted: iSource.ReportEvent(SymSource.TEvent.EReadingComplete); this.Dispose(); System.Diagnostics.Debug.WriteLine(string.Format("[Symbol Memory] END -> {0:d12}, source: {1}", System.GC.GetTotalMemory(true), iSource.FileName)); break; default: break; } }
private void CollectionIdentifier_EventHandler(MultiThreadedProcessor <SymbolFileSegment> .TEvent aEvent) { switch (aEvent) { default: break; case MultiThreadedProcessor <SymbolFileSegment> .TEvent.EEventStarting: break; case MultiThreadedProcessor <SymbolFileSegment> .TEvent.EEventCompleted: iCollectionIdentifier.ProcessItem -= new MultiThreadedProcessor <SymbolFileSegment> .ItemProcessor(CollectionIdentifier_ProcessItem); iCollectionIdentifier.EventHandler -= new MultiThreadedProcessor <SymbolFileSegment> .ProcessorEventHandler(CollectionIdentifier_EventHandler); iCollectionIdentifier.Dispose(); iCollectionIdentifier = null; DataPrepared(this); break; } }