public void ResetState(GeneralInformation?_) { file = null; prevIdx = 0; curHeader = new FileHeader() { MAGIC = FileUtility.ENTRY_FILE_MAGIC, // used to verify the file has not been corrupted on disk somehow. scribingVer = FileUtility.SCRIBE_FILE_VER, targetEntries = Profiler.RECORDS_HELD, name = " " // default to an empty name }; lhsEntry = null; rhsEntry = null; lhsStats = null; rhsStats = null; }
public static EntryFile ReadFile(FileInfo file) { var entryFile = new EntryFile(); try { using (var reader = new BinaryReader(file.OpenRead())) { entryFile.header = ReadHeader(reader); if (entryFile.header.MAGIC == -1) { return(null); } entryFile.times = new double[entryFile.header.entries]; entryFile.calls = new int[entryFile.header.entries]; if (entryFile.header.entryPerCall) { Array.Fill(entryFile.calls, 1); } for (int i = 0; i < entryFile.header.entries; i++) { entryFile.times[i] = reader.ReadDouble(); if (!entryFile.header.entryPerCall) { entryFile.calls[i] = reader.ReadInt32(); } } reader.Close(); reader.Dispose(); } } catch (Exception e) { ThreadSafeLogger.ReportException(e, "Failed while reading entry file from disk."); } return(entryFile); }
public static void WriteFile(EntryFile file) { var fileName = FinalFileNameFor(file.header.methodName); try { using (var writer = new BinaryWriter(File.Open(fileName, FileMode.Create))) { writer.Write(file.header.MAGIC); writer.Write(file.header.scribingVer); writer.Write(file.header.methodName); writer.Write(file.header.name); writer.Write(file.header.entryPerCall); writer.Write(file.header.onlyEntriesWithValues); writer.Write(file.header.entries); writer.Write(file.header.targetEntries); // interleaved is faster by profiling, (even if less cache-efficient) for (var i = 0; i < file.header.entries; i++) { writer.Write(file.times[i]); if (!file.header.entryPerCall) { writer.Write(file.calls[i]); } } writer.Close(); writer.Dispose(); } } catch (Exception e) { ThreadSafeLogger.ReportException(e, $"Caught an exception when writing file to disk, if the file exists on disk, it should be deleted at {fileName}"); } changed = true; }