示例#1
0
        public IEnumerable <StoreStatistics> GetStatistics()
        {
            if (!_persistenceManager.FileExists(GetStatisticsHeaderFile()))
            {
                yield break;
            }
            using (var headerStream = _persistenceManager.GetInputStream(GetStatisticsHeaderFile()))
            {
                using (var headerReader = new BinaryReader(headerStream))
                {
                    using (
                        var recordStream =
                            _persistenceManager.GetInputStream(GetStatisticsLogFile()))
                    {
                        long offset = headerStream.Length - StoreStatisticsHeaderRecord.RecordSize;
                        while (offset >= 0)
                        {
                            headerReader.BaseStream.Seek(offset, SeekOrigin.Begin);
                            var header = StoreStatisticsHeaderRecord.Load(headerReader);
                            recordStream.Seek(header.StartOffset, SeekOrigin.Begin);
                            var recordReader = new StreamReader(recordStream);
                            var record       = StoreStatisticsRecord.Load(recordReader);
                            yield return
                                (new StoreStatistics(header.CommitNumber, header.Timestamp, record.TotalTripleCount,
                                                     record.PredicateTripleCounts));

                            offset -= StoreStatisticsHeaderRecord.RecordSize;
                        }
                    }
                }
            }
        }