Decision trie data structure provider.
Inheritance: IDisposable
 public void CleanUp()
 {
     _provider.Dispose();
     _provider = null;
     GC.Collect(int.MaxValue, GCCollectionMode.Forced, true);
     GC.WaitForPendingFinalizers();
 }
 /// <summary>
 /// In a single thread loops through the useragents in the file
 /// provided perform a match with the data set provided passing
 /// control back to the method provided for further processing.
 /// </summary>
 /// <param name="provider"></param>
 /// <param name="userAgents"></param>
 /// <param name="method"></param>
 /// <returns>Counts for each of the methods used</returns>
 internal static Results DetectLoopSingleThreaded(TrieProvider provider, IEnumerable<string> userAgents, ProcessTrie method, object state)
 {
     var results = new Results();
     foreach (var line in userAgents)
     {
         method(results, provider.GetDeviceIndex(line.Trim()), state);
         results.Count++;
     }
     ReportMethods(results.Methods);
     ReportTime(results);
     return results;
 }
 /// <summary>
 /// Using multiple threads loops through the useragents in the file
 /// provided perform a match with the data set provided passing
 /// control back to the method provided for further processing.
 /// </summary>
 /// <param name="provider"></param>
 /// <param name="userAgents"></param>
 /// <param name="method"></param>
 /// <returns>Counts for each of the methods used</returns>
 internal static Results DetectLoopMultiThreaded(TrieProvider provider, IEnumerable<string> userAgents, ProcessTrie method, object state)
 {
     var results = new Results();
     Parallel.ForEach(userAgents, line =>
     {
         method(results, provider.GetDeviceIndex(line.Trim()), state);
         Interlocked.Increment(ref results.Count);
     });
     ReportMethods(results.Methods);
     ReportTime(results);
     return results;
 }
 public void CreateDataSet()
 {
     Utils.CheckFileExists(DataFile);
     _provider = TrieFactory.Create(DataFile, false);
 }
 /// <summary>
 /// Create the two providers for managed and unmanaged code.
 /// </summary>
 public virtual void Initialise()
 {
     _unmanagedProvider = new TrieWrapper(DataFile);
     _managedProvider = TrieFactory.Create(DataFile);
 }
 /// <summary>
 /// Disposes of the providers if not already done so.
 /// </summary>
 /// <param name="disposing"></param>
 protected virtual void Disposing(bool disposing) 
 {
     if (_managedProvider != null)
     {
         _managedProvider.Dispose();
         _managedProvider = null;
     }
     if (_unmanagedProvider != null)
     {
         _unmanagedProvider.Dispose();
         _unmanagedProvider = null;
     }
 }