Пример #1
0
        private void FileSystemProcessorOnSnapshotComputed(object sender, SnapshotComputedResult e)
        {
            var fileSystemTreeComputed = new FileSystemTreeComputed {
                OperationId = e.OperationInfo.OperationId,
                Error       = ErrorResponseHelper.CreateErrorResponse(e.Error)
            };

            if (e.PreviousSnapshot != null)
            {
                fileSystemTreeComputed.OldVersion = e.PreviousSnapshot.Version;
                fileSystemTreeComputed.NewVersion = e.NewSnapshot.Version;
            }

            _typedEventSender.SendEventAsync(fileSystemTreeComputed);
        }
Пример #2
0
        private void FileSystemProcessorOnSnapshotComputed(object sender, SnapshotComputedResult e)
        {
            if (e.Error != null)
            {
                return;
            }

            _taskQueue.Enqueue(ComputeNewStatedId, () =>
                               ComputeNewState(e.PreviousSnapshot, e.NewSnapshot, e.FullPathChanges));

            // Enqueue a GC at this point makes sense as there might be a lot of
            // garbage to reclaim from previous file contents stored in native heap.
            // By performin a full GC and waiting for finalizer, we ensure that (most)
            // orphan SafeHandles are released in a timely fashion. We enqueue a
            // separate task to ensure there is no potential state keeping these
            // variables alive for slightly too long.
            _taskQueue.Enqueue(GarbageCollectId, () => {
                Logger.LogMemoryStats();
                GC.Collect(GC.MaxGeneration);
                GC.WaitForPendingFinalizers();
                Logger.LogMemoryStats();
            });
        }