public void SerializeSnapshot(ISnapshot snap, Stream stream) { snap.AcquireReference(); try { _sentSnapshot.Add(snap.SnapshotSeq, snap); } catch (Exception e) { int i = 0; i++; } _snapshotQueue.Enqueue(snap.SnapshotSeq); ISnapshot baseSnap = GetBaseSnapshot(AckedSnapshotId); if (baseSnap == null) { _emptySnapshot.SnapshotSeq = -1; _snapSerializer.Serialize(_emptySnapshot, snap, stream); _lastAllSnapShotId = snap.SnapshotSeq; _lastAllSnapShotTime = snap.ServerTime; _isSendAll = true; _logger.Warn("send full snapshot!"); FullCount++; } else { _snapSerializer.Serialize(baseSnap, snap, stream); _isSendAll = false; DiffCount++; } ClearOldSnapshot(AckedSnapshotId); ClearSnapshotWhenLimitExceeded(); }
public void AddSnapshot(ISnapshot snapshot) { snapshot.AcquireReference(); var snapshotList = _list; var insertIndex = snapshotList.Count; for (var i = 0; i < snapshotList.Count; i++) { var snap = snapshotList[i]; if (snap.SnapshotSeq > snapshot.SnapshotSeq) { insertIndex = i; break; } } snapshotList.Insert(insertIndex, snapshot); //控制队列长度 if (snapshotList.Count > MaxSnapshotSize) { RefCounterRecycler.Instance.ReleaseReference(snapshotList[0]); // snapshotList[0].ReleaseReference(); //snapshotList[0].DelRef(); snapshotList.RemoveAt(0); } }