public AssetDependencyManager(AllAssetManager assetManager) : this()
        {
            var progressNameTmp = string.Format(progressName, DependencyResearcher.stepCount);
            var assets          = assetManager.assetList;
            int count           = assets.Count;
            var recDepDict      = new Dictionary <AssetInfo, List <AssetInfo> >();
            var noRecDepDict    = new Dictionary <AssetInfo, List <AssetInfo> >();

            try
            {
                for (int i = 0; i < count; ++i)
                {
                    var asset = assets[i];

                    EditorUtility.DisplayProgressBar(progressNameTmp,
                                                     string.Format("check {0}...", asset.Path), (float)i / count);

                    var recDeps   = new List <AssetInfo>();
                    var noRecDeps = new List <AssetInfo>();

                    //Debug.Log(string.Format("<color=#ff0000ff>{0}</color>", asset.Path));

                    var recDepPaths = AssetDatabase.GetDependencies(asset.Path, true);
                    foreach (var path in recDepPaths)
                    {
                        if (assetManager.pathDict.TryGetValue(path, out var info))
                        {
                            recDeps.Add(info);
                        }
                    }
                    var noRecDepPaths = AssetDatabase.GetDependencies(asset.Path, false);
                    foreach (var path in noRecDepPaths)
                    {
                        if (assetManager.pathDict.TryGetValue(path, out var info))
                        {
                            noRecDeps.Add(info);
                        }
                    }

                    recDepDict[asset]   = recDeps;
                    noRecDepDict[asset] = noRecDeps;
                }
                recurDependencyList   = recDepDict;
                noRecurDependencyList = noRecDepDict;
            }
            finally
            {
                EditorUtility.ClearProgressBar();
            }
        }
        static void Search()
        {
            var assetManager  = new AllAssetManager();
            var dependManager = new AssetDependencyManager(assetManager);

            var exts = new Dictionary <string, int>(10);

            foreach (var info in assetManager.assetList)
            {
                var ext = info.Extension.ToLower();
                if (exts.TryGetValue(ext, out var count))
                {
                    exts[ext] = count + 1;
                }
                else
                {
                    exts[ext] = 1;
                }
            }
            var sortedExts = exts.OrderByDescending(a => a.Value);
            var sb         = new System.Text.StringBuilder();

            sb.AppendLine("Extensions:");
            foreach (var extPair in sortedExts)
            {
                sb.AppendLine(string.Format("{0}: {1}", extPair.Value, extPair.Key));
            }
            Debug.Log(sb.ToString());

            sb.Clear();
            sb.AppendLine("Broken assets:");
            foreach (var info in assetManager.brokenAssetList)
            {
                sb.AppendLine(info.Path);
            }
            Debug.LogWarning(sb.ToString());
        }