public void ReadJsonGraph(string path, string targetPath = null, bool loadTargetIfApplicable = true) { if (loadTargetIfApplicable && targetPath != null && File.Exists(targetPath)) { if (Deserialize(targetPath)) { return; } } MutableDataflowGraph = new MutableDirectedGraph(); DataflowGraph = MutableDataflowGraph; using (var stream = new ProgressStream(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 64 << 10), "JsonData")) using (var textReader = new StreamReader(stream)) using (var textWriter = new StreamWriter(Path.ChangeExtension(targetPath, ".filter.json"))) using (var reader = new JsonFilter(path, new JsonTextReader(textReader), new JsonTextWriter(textWriter))) { AssertPostRead(reader, JsonToken.StartObject); while (reader.Read() && reader.TokenType == JsonToken.PropertyName) { string propertyName = (string)reader.Value; switch (propertyName) { case "graph": ReadGraph(reader); break; case "execution": ReadExecutions(reader); break; case "pips": ReadPips(reader); break; default: reader.Skip(); break; } } } AddEdges(); Compute(); if (targetPath != null) { Serialize(targetPath); } }
public bool Deserialize(string path) { Console.WriteLine("Deserializing data..."); using (var fs = new ProgressStream(File.Open(path, FileMode.Open), "DeserializedData")) using (var reader = new BuildXLReader(false, fs, false)) { Guid readVersion = reader.ReadGuid(); if (readVersion != VersionGuid) { return(false); } DataflowGraph = DeserializedDirectedGraph.DeserializeAsync(reader).Result; var maxNode = (uint)DataflowGraph.NodeCount; //reader.Read(maxNode, AggregateCosts, r => r.ReadUInt64()); reader.Read(maxNode, PipIds, r => r.ReadInt32()); reader.Read(maxNode, SemiStableHashes, r => r.ReadUInt64()); reader.Read(maxNode, StartTimes, r => r.ReadUInt64()); reader.Read(maxNode, Durations, r => r.ReadUInt64()); reader.Read(maxNode, PipTypes, r => (PipType)r.ReadByte()); //reader.Read(maxNode, CriticalChain, ReadNode); MinStartTime = reader.ReadUInt64(); MaxEndTime = reader.ReadUInt64(); TotalDuration = reader.ReadUInt64(); //MaxAggregateCost = reader.ReadUInt64(); //CriticalPathHeadNode = ReadNode(reader); //reader.Read(CriticalPath, ReadNode); var stringTable = StringTable.DeserializeAsync(reader).Result; SymbolTable = SymbolTable.DeserializeAsync(reader, Task.FromResult(stringTable)).Result; reader.Read(maxNode, OutputValues, r => r.ReadFullSymbol()); } Console.WriteLine("End deserializing data"); Compute(); return(true); }