protected override void Process(String[] args) { OnProcessStarting(); TriggerActions(args.ToList()); List <String> paths = args.Distinct().Select(x => x.Trim()).ToList(); if (paths.Count.Equals(0)) { LoggerBundle.Fatal(new ArgumentException("no argument given")); Environment.Exit(1); } foreach (String path in paths) { LoggerBundle.Inform($"Processing path '{path}'..."); if (!Directory.Exists(path)) { LoggerBundle.Warn($"Path '{path}' not found. Skipping."); continue; } LoggerBundle.Debug("Preloading data..."); List <String> tracks; Stopwatch sw = new Stopwatch(); sw.Start(); using (DataContext dataContext = DataContextFactory.GetInstance()) { tracks = dataContext.SetTracks.AsNoTracking().Select(x => x.Path).ToList(); } sw.Stop(); LoggerBundle.Debug($"Getting data finished in {sw.ElapsedMilliseconds}ms"); List <String> buffer = new List <String>(); DataSource <String> ds = new PathDataSource(path, _config.Extensions); LoggerBundle.Inform($"Start to crawl path '{path}'..."); foreach (String file in ds.Get()) { buffer.Add(file); Int32 bufferCount = buffer.Count; if (bufferCount < _config.BufferSize) { if (bufferCount % (_config.BufferSize < 1337 ? _config.BufferSize : 1337) == 0) { LoggerBundle.Trace($"Adding files to buffer [{bufferCount}/{_config.BufferSize}] ..."); } continue; } ProcessBuffer(ref buffer, ref tracks); } ProcessBuffer(ref buffer, ref tracks); } }