Пример #1
0
        private JsonMapNode LoadOrRebuildMap(PageOptions options)
        {
            JsonMapNode root;
            Stopwatch   w = Stopwatch.StartNew();

            string mapPath = Path.ChangeExtension(options.InputFilePath, ".map.json");

            if (_fileSystem.FileExists(mapPath) && _fileSystem.FileGetLastWriteTime(mapPath) > _fileSystem.FileGetLastWriteTime(options.InputFilePath))
            {
                // If map exists and is up-to-date, just reload it
                Console.WriteLine($"Loading Json Map \"{mapPath}\"...");
                root = JsonConvert.DeserializeObject <JsonMapNode>(_fileSystem.FileReadAllText(mapPath));
            }
            else
            {
                // Otherwise, build the map and save it (1% -> 10MB limit)
                double mapSizeLimit = 10 * JsonMapSettings.Megabyte * (options.TargetMapSizeRatio / 0.01);

                Console.WriteLine($"Building {options.TargetMapSizeRatio:p0} Json Map of \"{options.InputFilePath}\" into \"{mapPath}\"...");
                root = JsonMapBuilder.Build(() => _fileSystem.FileOpenRead(options.InputFilePath), new JsonMapSettings(options.TargetMapSizeRatio, mapSizeLimit));

                if (root != null)
                {
                    _fileSystem.FileWriteAllText(mapPath, JsonConvert.SerializeObject(root, Formatting.None));
                }
            }

            w.Stop();
            Console.WriteLine($"Done in {w.Elapsed.TotalSeconds:n1}s.");

            return(root);
        }
Пример #2
0
        static void Build(string jsonFilePath, double ratio = 0.01)
        {
            string mapPath = Path.ChangeExtension(jsonFilePath, ".map.json");

            Console.WriteLine($"Building {ratio:p1} map of \"{jsonFilePath}\"...");
            Stopwatch w = Stopwatch.StartNew();

            JsonMapNode root = JsonMapBuilder.Build(jsonFilePath, new JsonMapSettings(ratio, (10 * JsonMapSettings.Megabyte) * (ratio / 0.01)));

            File.WriteAllText(mapPath, JsonConvert.SerializeObject(root, Formatting.None));

            Console.WriteLine($"Done in {w.Elapsed.TotalSeconds:n1}s; map is {ToSizeString(new FileInfo(mapPath).Length)}");
            Console.WriteLine();
        }