Пример #1
0
        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;
        }