public TheImport(CORE.FileImporter importer)
        {
            Importer = importer;

            _uncConverter = new UncConverter2();

            RootFolderOrUnc2RootFolder = new StringDictionary();

            _remainingDriveLetters = new List<char>();

            for (int pos = 65; pos < 91; pos++)
            {
                _remainingDriveLetters.Add(Convert.ToChar(pos));
            }

            TemporaryMappedDrives = new List<NetworkDrive>();

            Location2Id = new Dictionary<string, int>();

            DriveLetters = new Dictionary<string, EnhancedDriveInfo>();
            RootFoldersOfDrive = new Dictionary<EnhancedDriveInfo, List<string>>();
            ItemsChainedByTagCache = new ItemsChainedByTagCache(this);

            if (Importer.ExcludeUnmatchedFiles)
            {
                UnmatchedFiles = new List<EnhancedFileInfo>();
            }
        }
        protected virtual void Dispose(bool calledFromCode)
        {
            if (!calledFromCode)
                return;

            Importer = null;
            _uncConverter.Dispose();
            _uncConverter = null;
            RootFolderOrUnc2RootFolder.Clear();
            RootFolderOrUnc2RootFolder = null;
            _remainingDriveLetters.Clear();
            _remainingDriveLetters = null;
            TemporaryMappedDrives.Clear();
            TemporaryMappedDrives = null;
            Location2Id.Clear();
            Location2Id = null;
            RootFoldersOfDrive.Clear();
            RootFoldersOfDrive = null;
            DriveLetters.Clear();
            DriveLetters = null;
            Files = null;

            // Free other state (managed objects).

            // Free your own state (unmanaged objects).
            // Set large fields to null.
        }