public RoadNodesToZipArchiveWriter(RecyclableMemoryStreamManager manager, Encoding encoding)
 {
     _manager  = manager ?? throw new ArgumentNullException(nameof(manager));
     _encoding = encoding ?? throw new ArgumentNullException(nameof(encoding));
 }
示例#2
0
 public RequestResponseLoggingMiddleware(RequestDelegate next, Action <HttpContext, RequestProfilerModel> requestResponseHandler)
 {
     _next = next;
     _recyclableMemoryStreamManager = new RecyclableMemoryStreamManager();
     _requestResponseHandler        = requestResponseHandler;
 }
示例#3
0
 public RequestResponseLoggingMiddleware(ILoggerFactory loggerFactory, RequestDelegate next)
 {
     this.logger = loggerFactory.CreateLogger <RequestResponseLoggingMiddleware>();
     this.next   = next;
     this.recyclableMemoryStreamManager = new RecyclableMemoryStreamManager();
 }
 public FileChunkController(RecyclableMemoryStreamManager recyclableMemoryStreamManager, WorkerQueueContainer workerQueueContainer)
 {
     _recyclableMemoryStreamManager = recyclableMemoryStreamManager;
     _workerQueueContainer          = workerQueueContainer;
 }
示例#5
0
 public FastStreamVsMemoryStreamWithBinaryWriter()
 {
     this._manager       = new RecyclableMemoryStreamManager();
     this._hugeArrayPool = ArrayPool <byte> .Create(int.MaxValue, 10);
 }
示例#6
0
 public RequestResponseLoggingMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)
 {
     _next = next;
     _recyclableMemoryStreamManager = new RecyclableMemoryStreamManager();
     _logger = loggerFactory.CreateLogger <RequestResponseLoggingMiddleware>();
 }
 public RequestInterceptionMiddleware(RequestDelegate next, RecyclableMemoryStreamManager manager, ILoggerFactory loggerFactory)
 {
     _next    = next;
     _manager = manager;
     _logger  = loggerFactory.CreateLogger <RequestInterceptionMiddleware>();
 }
示例#8
0
 public LoggerMiddleware(RequestDelegate next, ILogger logger)
 {
     this.next     = next ?? throw new ArgumentNullException(nameof(next));
     this.logger   = logger;
     streamManager = new RecyclableMemoryStreamManager();
 }
示例#9
0
 public ImageTransformerV4()
 {
     _streamManager = new RecyclableMemoryStreamManager();
 }
示例#10
0
        public BlobClientReadWriteTestProvider(RecyclableMemoryStreamManager recyclableMemoryStreamManager)
        {
            EnsureArg.IsNotNull(recyclableMemoryStreamManager, nameof(recyclableMemoryStreamManager));

            _recyclableMemoryStreamManager = recyclableMemoryStreamManager;
        }
示例#11
0
 /// <summary>
 /// Creates a new instance of an LogResponseMiddleware class, and initializes it with the specified arguments.
 /// </summary>
 /// <param name="next"></param>
 /// <param name="logger"></param>
 public LogResponseMiddleware(RequestDelegate next, ILogger <LogResponseMiddleware> logger)
 {
     _next   = next;
     _logger = logger;
     _recyclableMemoryStreamManager = new RecyclableMemoryStreamManager();
 }
示例#12
0
 public BilibiliComicOperator(INetworkAdapter networkAdapter, RecyclableMemoryStreamManager recyclableMemoryStreamManager)
 {
     this.networkAdapter = networkAdapter;
     this.recyclableMemoryStreamManager = recyclableMemoryStreamManager;
 }
示例#13
0
 public TranscoderTests()
 {
     _recyclableMemoryStreamManager = new RecyclableMemoryStreamManager();
     _transcoder = new Transcoder(_recyclableMemoryStreamManager, NullLogger <Transcoder> .Instance);
 }
示例#14
0
 public StreamImageConverter(RecyclableMemoryStreamManager recyclableMemoryStreamManager)
 {
     this.recyclableMemoryStreamManager = recyclableMemoryStreamManager;
 }
        public void AllMultiplesUpToMaxCanBePooled()
        {
            const int BlockSize = 100;
            const int LargeBufferMultiple = 1000;
            const int MaxBufferSize = 8000;

            for (var size = LargeBufferMultiple; size <= MaxBufferSize; size += LargeBufferMultiple)
            {
                var memMgr = new RecyclableMemoryStreamManager(BlockSize, LargeBufferMultiple, MaxBufferSize)
                             {AggressiveBufferReturn = this.AggressiveBufferRelease};
                var buffer = memMgr.GetLargeBuffer(size, DefaultTag);
                Assert.That(memMgr.LargePoolFreeSize, Is.EqualTo(0));
                Assert.That(memMgr.LargePoolInUseSize, Is.EqualTo(size));

                memMgr.ReturnLargeBuffer(buffer, DefaultTag);

                Assert.That(memMgr.LargePoolFreeSize, Is.EqualTo(size));
                Assert.That(memMgr.LargePoolInUseSize, Is.EqualTo(0));
            }
        }
示例#16
0
 public static void Clear() => _manager = null;
 /// <summary>
 /// Initializes a new instance of the <see cref="AzureBlobStorageImageResolver"/> class.
 /// </summary>
 /// <param name="blob">The Azure blob.</param>
 /// <param name="memoryStreamManager">
 /// The recyclable memorystream manager used for managing pooled stream
 /// buffers independently from image buffer pooling.
 /// </param>
 public AzureBlobStorageImageResolver(BlobClient blob, RecyclableMemoryStreamManager memoryStreamManager)
 {
     this.blob = blob;
     this.memoryStreamManager = memoryStreamManager;
 }
        public RoadSegmentLaneAttributeRecordProjection(RecyclableMemoryStreamManager manager,
                                                        Encoding encoding)
        {
            if (manager == null)
            {
                throw new ArgumentNullException(nameof(manager));
            }
            if (encoding == null)
            {
                throw new ArgumentNullException(nameof(encoding));
            }

            When <Envelope <ImportedRoadSegment> >((context, envelope, token) =>
            {
                if (envelope.Message.Lanes.Length == 0)
                {
                    return(Task.CompletedTask);
                }

                var laneRecords = envelope.Message
                                  .Lanes
                                  .Select(lane =>
                {
                    var laneDirectionTranslation = RoadSegmentLaneDirection.Parse(lane.Direction).Translation;
                    return(new RoadSegmentLaneAttributeRecord
                    {
                        Id = lane.AttributeId,
                        RoadSegmentId = envelope.Message.Id,
                        DbaseRecord = new RoadSegmentLaneAttributeDbaseRecord
                        {
                            RS_OIDN = { Value = lane.AttributeId },
                            WS_OIDN = { Value = envelope.Message.Id },
                            WS_GIDN = { Value = $"{envelope.Message.Id}_{lane.AsOfGeometryVersion}" },
                            AANTAL = { Value = lane.Count },
                            RICHTING = { Value = laneDirectionTranslation.Identifier },
                            LBLRICHT = { Value = laneDirectionTranslation.Name },
                            VANPOS = { Value = (double)lane.FromPosition },
                            TOTPOS = { Value = (double)lane.ToPosition },
                            BEGINTIJD = { Value = lane.Origin.Since },
                            BEGINORG = { Value = lane.Origin.OrganizationId },
                            LBLBGNORG = { Value = lane.Origin.Organization },
                        }.ToBytes(manager, encoding)
                    });
                });

                return(context.RoadSegmentLaneAttributes.AddRangeAsync(laneRecords, token));
            });

            When <Envelope <RoadNetworkChangesBasedOnArchiveAccepted> >(async(context, envelope, token) =>
            {
                foreach (var change in envelope.Message.Changes.Flatten())
                {
                    switch (change)
                    {
                    case RoadSegmentAdded segment:
                        if (segment.Lanes.Length != 0)
                        {
                            var lanes = segment
                                        .Lanes
                                        .Select(lane =>
                            {
                                var laneDirectionTranslation =
                                    RoadSegmentLaneDirection.Parse(lane.Direction).Translation;
                                return(new RoadSegmentLaneAttributeRecord
                                {
                                    Id = lane.AttributeId,
                                    RoadSegmentId = segment.Id,
                                    DbaseRecord = new RoadSegmentLaneAttributeDbaseRecord
                                    {
                                        RS_OIDN = { Value = lane.AttributeId },
                                        WS_OIDN = { Value = segment.Id },
                                        WS_GIDN = { Value = $"{segment.Id}_{lane.AsOfGeometryVersion}" },
                                        AANTAL = { Value = lane.Count },
                                        RICHTING = { Value = laneDirectionTranslation.Identifier },
                                        LBLRICHT = { Value = laneDirectionTranslation.Name },
                                        VANPOS = { Value = (double)lane.FromPosition },
                                        TOTPOS = { Value = (double)lane.ToPosition },
                                        BEGINTIJD = { Value = LocalDateTimeTranslator.TranslateFromWhen(envelope.Message.When) },
                                        BEGINORG = { Value = envelope.Message.OrganizationId },
                                        LBLBGNORG = { Value = envelope.Message.Organization }
                                    }.ToBytes(manager, encoding)
                                });
                            });

                            await context.RoadSegmentLaneAttributes.AddRangeAsync(lanes);
                        }
//                        case RoadSegmentModified segment:
//                            if (segment.Lanes.Length == 0)
//                            {
//                                context.RoadSegmentLaneAttributes.RemoveRange(
//                                    context
//                                        .RoadSegmentLaneAttributes
//                                        .Local.Where(a => a.RoadSegmentId == segment.Id)
//                                        .Concat(await context
//                                            .RoadSegmentLaneAttributes
//                                            .Where(a => a.RoadSegmentId == segment.Id)
//                                            .ToArrayAsync(token)
//                                        ));
//                            }
//                            else
//                            {
//                                var currentSet = context
//                                    .RoadSegmentLaneAttributes
//                                    .Local.Where(a => a.RoadSegmentId == segment.Id)
//                                    .Concat(await context
//                                        .RoadSegmentLaneAttributes
//                                        .Where(a => a.RoadSegmentId == segment.Id)
//                                        .ToArrayAsync(token)
//                                    ).ToDictionary(a => a.Id);
//                                var nextSet = segment
//                                    .Lanes
//                                    .Select(lane =>
//                                    {
//                                        var laneDirectionTranslation = RoadSegmentLaneDirection.Parse(lane.Direction).Translation;
//                                        return new RoadSegmentLaneAttributeRecord
//                                        {
//                                            Id = lane.AttributeId,
//                                            RoadSegmentId = segment.Id,
//                                            DbaseRecord = new RoadSegmentLaneAttributeDbaseRecord
//                                            {
//                                                RS_OIDN = {Value = lane.AttributeId},
//                                                WS_OIDN = {Value = segment.Id},
//                                                WS_GIDN = {Value = $"{segment.Id}_{lane.AsOfGeometryVersion}"},
//                                                AANTAL = {Value = lane.Count},
//                                                RICHTING = {Value = laneDirectionTranslation.Identifier},
//                                                LBLRICHT = {Value = laneDirectionTranslation.Name},
//                                                VANPOS = {Value = (double) lane.FromPosition},
//                                                TOTPOS = {Value = (double) lane.ToPosition},
//                                                // TODO: This should come from the event
//                                                BEGINTIJD = {Value = null},
//                                                BEGINORG = {Value = null},
//                                                LBLBGNORG = {Value = null}
//                                            }.ToBytes(manager, encoding)
//                                        };
//                                    })
//                                    .ToDictionary(a => a.Id);
//                                context.RoadSegmentLaneAttributes.Synchronize(currentSet, nextSet, (current, next) =>
//                                    {
//                                        current.DbaseRecord = next.DbaseRecord;
//                                    });
//                            }
                        break;
                    }
                }
            });
        }
        public RoadSegmentRecordProjection(RecyclableMemoryStreamManager manager,
                                           Encoding encoding)
        {
            if (manager == null)
            {
                throw new ArgumentNullException(nameof(manager));
            }
            if (encoding == null)
            {
                throw new ArgumentNullException(nameof(encoding));
            }

            When <Envelope <ImportedRoadSegment> >(async(context, envelope, token) =>
            {
                var geometry =
                    GeometryTranslator.FromGeometryMultiLineString(BackOffice.Core.GeometryTranslator.Translate(envelope.Message.Geometry));
                var polyLineMShapeContent         = new PolyLineMShapeContent(geometry);
                var statusTranslation             = RoadSegmentStatus.Parse(envelope.Message.Status).Translation;
                var morphologyTranslation         = RoadSegmentMorphology.Parse(envelope.Message.Morphology).Translation;
                var categoryTranslation           = RoadSegmentCategory.Parse(envelope.Message.Category).Translation;
                var geometryDrawMethodTranslation =
                    RoadSegmentGeometryDrawMethod.Parse(envelope.Message.GeometryDrawMethod).Translation;
                var accessRestrictionTranslation =
                    RoadSegmentAccessRestriction.Parse(envelope.Message.AccessRestriction).Translation;
                await context.RoadSegments.AddAsync(
                    new RoadSegmentRecord
                {
                    Id = envelope.Message.Id,
                    ShapeRecordContent       = polyLineMShapeContent.ToBytes(manager, encoding),
                    ShapeRecordContentLength = polyLineMShapeContent.ContentLength.ToInt32(),
                    BoundingBox = RoadSegmentBoundingBox.From(polyLineMShapeContent.Shape),
                    DbaseRecord = new RoadSegmentDbaseRecord
                    {
                        WS_OIDN   = { Value = envelope.Message.Id },
                        WS_UIDN   = { Value = $"{envelope.Message.Id}_{envelope.Message.Version}" },
                        WS_GIDN   = { Value = $"{envelope.Message.Id}_{envelope.Message.GeometryVersion}" },
                        B_WK_OIDN = { Value = envelope.Message.StartNodeId },
                        E_WK_OIDN = { Value = envelope.Message.EndNodeId },
                        STATUS    = { Value = statusTranslation.Identifier },
                        LBLSTATUS = { Value = statusTranslation.Name },
                        MORF      = { Value = morphologyTranslation.Identifier },
                        LBLMORF   = { Value = morphologyTranslation.Name },
                        WEGCAT    = { Value = categoryTranslation.Identifier },
                        LBLWEGCAT = { Value = categoryTranslation.Name },
                        LSTRNMID  = { Value = envelope.Message.LeftSide.StreetNameId },
                        LSTRNM    = { Value = envelope.Message.LeftSide.StreetName },
                        RSTRNMID  = { Value = envelope.Message.RightSide.StreetNameId },
                        RSTRNM    = { Value = envelope.Message.RightSide.StreetName },
                        BEHEER    = { Value = envelope.Message.MaintenanceAuthority.Code },
                        LBLBEHEER = { Value = envelope.Message.MaintenanceAuthority.Name },
                        METHODE   = { Value = geometryDrawMethodTranslation.Identifier },
                        LBLMETHOD = { Value = geometryDrawMethodTranslation.Name },
                        OPNDATUM  = { Value = envelope.Message.RecordingDate },
                        BEGINTIJD = { Value = envelope.Message.Origin.Since },
                        BEGINORG  = { Value = envelope.Message.Origin.OrganizationId },
                        LBLBGNORG = { Value = envelope.Message.Origin.Organization },
                        TGBEP     = { Value = accessRestrictionTranslation.Identifier },
                        LBLTGBEP  = { Value = accessRestrictionTranslation.Name }
                    }.ToBytes(manager, encoding)
                },
                    token);
            });

            When <Envelope <RoadNetworkChangesBasedOnArchiveAccepted> >(async(context, envelope, token) =>
            {
                foreach (var message in envelope.Message.Changes.Flatten())
                {
                    switch (message)
                    {
                    case RoadSegmentAdded segment:
                        var geometry =
                            GeometryTranslator.FromGeometryMultiLineString(BackOffice.Core.GeometryTranslator.Translate(segment.Geometry));
                        var polyLineMShapeContent         = new PolyLineMShapeContent(geometry);
                        var statusTranslation             = RoadSegmentStatus.Parse(segment.Status).Translation;
                        var morphologyTranslation         = RoadSegmentMorphology.Parse(segment.Morphology).Translation;
                        var categoryTranslation           = RoadSegmentCategory.Parse(segment.Category).Translation;
                        var geometryDrawMethodTranslation =
                            RoadSegmentGeometryDrawMethod.Parse(segment.GeometryDrawMethod).Translation;
                        var accessRestrictionTranslation =
                            RoadSegmentAccessRestriction.Parse(segment.AccessRestriction).Translation;
                        await context.RoadSegments.AddAsync(
                            new RoadSegmentRecord
                        {
                            Id = segment.Id,
                            ShapeRecordContent       = polyLineMShapeContent.ToBytes(manager, encoding),
                            ShapeRecordContentLength = polyLineMShapeContent.ContentLength.ToInt32(),
                            BoundingBox = RoadSegmentBoundingBox.From(polyLineMShapeContent.Shape),
                            DbaseRecord = new RoadSegmentDbaseRecord
                            {
                                WS_OIDN   = { Value = segment.Id },
                                WS_UIDN   = { Value = $"{segment.Id}_{segment.Version}" },
                                WS_GIDN   = { Value = $"{segment.Id}_{segment.GeometryVersion}" },
                                B_WK_OIDN = { Value = segment.StartNodeId },
                                E_WK_OIDN = { Value = segment.EndNodeId },
                                STATUS    = { Value = statusTranslation.Identifier },
                                LBLSTATUS = { Value = statusTranslation.Name },
                                MORF      = { Value = morphologyTranslation.Identifier },
                                LBLMORF   = { Value = morphologyTranslation.Name },
                                WEGCAT    = { Value = categoryTranslation.Identifier },
                                LBLWEGCAT = { Value = categoryTranslation.Name },
                                LSTRNMID  = { Value = segment.LeftSide.StreetNameId },
                                // TODO: Where does this come from?
                                LSTRNM   = { Value = null },
                                RSTRNMID = { Value = segment.RightSide.StreetNameId },
                                // TODO: Where does this come from?
                                RSTRNM    = { Value = null },
                                BEHEER    = { Value = segment.MaintenanceAuthority.Code },
                                LBLBEHEER = { Value = segment.MaintenanceAuthority.Name },
                                METHODE   = { Value = geometryDrawMethodTranslation.Identifier },
                                LBLMETHOD = { Value = geometryDrawMethodTranslation.Name },
                                OPNDATUM  = { Value = LocalDateTimeTranslator.TranslateFromWhen(envelope.Message.When) },
                                BEGINTIJD = { Value = LocalDateTimeTranslator.TranslateFromWhen(envelope.Message.When) },
                                BEGINORG  = { Value = envelope.Message.OrganizationId },
                                LBLBGNORG = { Value = envelope.Message.Organization },
                                TGBEP     = { Value = accessRestrictionTranslation.Identifier },
                                LBLTGBEP  = { Value = accessRestrictionTranslation.Name }
                            }.ToBytes(manager, encoding)
                        },
                            token);
                        break;
                    }
                }
            });
        }
 public MemoryStreamManager(RecyclableMemoryStreamManager recyclableMemoryStreamManager)
 {
     this.recyclableMemoryStreamManager = recyclableMemoryStreamManager;
 }
示例#21
0
        /// <summary>
        /// Creates a new instance. This class is also used to shareable a context across all instance that are created below one Cluster instance.
        /// One configuration instance per Cluster instance.
        /// </summary>
        internal Configuration(Policies policies,
                               ProtocolOptions protocolOptions,
                               PoolingOptions poolingOptions,
                               SocketOptions socketOptions,
                               ClientOptions clientOptions,
                               IAuthProvider authProvider,
                               IAuthInfoProvider authInfoProvider,
                               QueryOptions queryOptions,
                               IAddressTranslator addressTranslator,
                               IReadOnlyDictionary <string, IExecutionProfile> executionProfiles,
                               MetadataSyncOptions metadataSyncOptions,
                               IEndPointResolver endPointResolver,
                               IDriverMetricsProvider driverMetricsProvider,
                               DriverMetricsOptions metricsOptions,
                               string sessionName,
                               GraphOptions graphOptions,
                               Guid?clusterId,
                               string appVersion,
                               string appName,
                               MonitorReportingOptions monitorReportingOptions,
                               TypeSerializerDefinitions typeSerializerDefinitions,
                               ISessionFactory sessionFactory                       = null,
                               IRequestOptionsMapper requestOptionsMapper           = null,
                               IStartupOptionsFactory startupOptionsFactory         = null,
                               IInsightsSupportVerifier insightsSupportVerifier     = null,
                               IRequestHandlerFactory requestHandlerFactory         = null,
                               IHostConnectionPoolFactory hostConnectionPoolFactory = null,
                               IRequestExecutionFactory requestExecutionFactory     = null,
                               IConnectionFactory connectionFactory                 = null,
                               IControlConnectionFactory controlConnectionFactory   = null,
                               IPrepareHandlerFactory prepareHandlerFactory         = null,
                               ITimerFactory timerFactory = null,
                               IObserverFactoryBuilder observerFactoryBuilder = null,
                               IInsightsClientFactory insightsClientFactory   = null)
        {
            AddressTranslator = addressTranslator ?? throw new ArgumentNullException(nameof(addressTranslator));
            QueryOptions      = queryOptions ?? throw new ArgumentNullException(nameof(queryOptions));
            GraphOptions      = graphOptions ?? new GraphOptions();

            ClusterId                   = clusterId ?? Guid.NewGuid();
            ApplicationVersion          = appVersion ?? Configuration.DefaultApplicationVersion;
            ApplicationName             = appName ?? Configuration.FallbackApplicationName;
            ApplicationNameWasGenerated = appName == null;

            Policies              = policies;
            ProtocolOptions       = protocolOptions;
            PoolingOptions        = poolingOptions;
            SocketOptions         = socketOptions;
            ClientOptions         = clientOptions;
            AuthProvider          = authProvider;
            AuthInfoProvider      = authInfoProvider;
            StartupOptionsFactory = startupOptionsFactory ?? new StartupOptionsFactory(ClusterId, ApplicationVersion, ApplicationName);
            SessionFactory        = sessionFactory ?? new SessionFactory();
            RequestOptionsMapper  = requestOptionsMapper ?? new RequestOptionsMapper();
            MetadataSyncOptions   = metadataSyncOptions?.Clone() ?? new MetadataSyncOptions();
            DnsResolver           = new DnsResolver();
            EndPointResolver      = endPointResolver ?? new EndPointResolver(DnsResolver, protocolOptions);
            MetricsOptions        = metricsOptions ?? new DriverMetricsOptions();
            MetricsProvider       = driverMetricsProvider ?? new NullDriverMetricsProvider();
            SessionName           = sessionName;
            MetricsEnabled        = driverMetricsProvider != null;
            TypeSerializers       = typeSerializerDefinitions?.Definitions;

            ObserverFactoryBuilder    = observerFactoryBuilder ?? (MetricsEnabled ? (IObserverFactoryBuilder) new MetricsObserverFactoryBuilder() : new NullObserverFactoryBuilder());
            RequestHandlerFactory     = requestHandlerFactory ?? new RequestHandlerFactory();
            HostConnectionPoolFactory = hostConnectionPoolFactory ?? new HostConnectionPoolFactory();
            RequestExecutionFactory   = requestExecutionFactory ?? new RequestExecutionFactory();
            ConnectionFactory         = connectionFactory ?? new ConnectionFactory();
            ControlConnectionFactory  = controlConnectionFactory ?? new ControlConnectionFactory();
            PrepareHandlerFactory     = prepareHandlerFactory ?? new PrepareHandlerFactory();
            TimerFactory = timerFactory ?? new TaskBasedTimerFactory();

            RequestOptions    = RequestOptionsMapper.BuildRequestOptionsDictionary(executionProfiles, policies, socketOptions, clientOptions, queryOptions, GraphOptions);
            ExecutionProfiles = BuildExecutionProfilesDictionary(executionProfiles, RequestOptions);

            MonitorReportingOptions = monitorReportingOptions ?? new MonitorReportingOptions();
            InsightsSupportVerifier = insightsSupportVerifier ?? Configuration.DefaultInsightsSupportVerifier;
            InsightsClientFactory   = insightsClientFactory ?? Configuration.DefaultInsightsClientFactory;

            // Create the buffer pool with 16KB for small buffers and 256Kb for large buffers.
            // The pool does not eagerly reserve the buffers, so it doesn't take unnecessary memory
            // to create the instance.
            BufferPool = new RecyclableMemoryStreamManager(16 * 1024, 256 * 1024, ProtocolOptions.MaximumFrameLength);
            Timer      = new HashedWheelTimer();
        }
示例#22
0
 public ProjectionTestServices()
 {
     MemoryStreamManager = new RecyclableMemoryStreamManager();
 }
示例#23
0
 public GlobalExceptionMiddleware(RequestDelegate requestDelegate)
 {
     _requestDelegate = requestDelegate;
     _recyclableMemoryStreamManager = new RecyclableMemoryStreamManager();
 }
 public HitomiNozomiIndexReader(IHttpClientFactory http, RecyclableMemoryStreamManager memory)
 {
     _http   = http.CreateClient(nameof(HitomiNozomiIndexReader));
     _memory = memory;
 }
        public RoadSegmentEuropeanRoadAttributeRecordProjection(RecyclableMemoryStreamManager manager,
                                                                Encoding encoding)
        {
            if (manager == null)
            {
                throw new ArgumentNullException(nameof(manager));
            }
            if (encoding == null)
            {
                throw new ArgumentNullException(nameof(encoding));
            }

            When <Envelope <ImportedRoadSegment> >((context, envelope, token) =>
            {
                if (envelope.Message.PartOfEuropeanRoads.Length == 0)
                {
                    return(Task.CompletedTask);
                }

                var europeanRoadAttributes = envelope.Message
                                             .PartOfEuropeanRoads
                                             .Select(europeanRoad => new RoadSegmentEuropeanRoadAttributeRecord
                {
                    Id            = europeanRoad.AttributeId,
                    RoadSegmentId = envelope.Message.Id,
                    DbaseRecord   = new RoadSegmentEuropeanRoadAttributeDbaseRecord
                    {
                        EU_OIDN   = { Value = europeanRoad.AttributeId },
                        WS_OIDN   = { Value = envelope.Message.Id },
                        EUNUMMER  = { Value = europeanRoad.Number },
                        BEGINTIJD = { Value = europeanRoad.Origin.Since },
                        BEGINORG  = { Value = europeanRoad.Origin.OrganizationId },
                        LBLBGNORG = { Value = europeanRoad.Origin.Organization },
                    }.ToBytes(manager, encoding)
                });

                return(context.AddRangeAsync(europeanRoadAttributes, token));
            });

            When <Envelope <RoadNetworkChangesBasedOnArchiveAccepted> >(async(context, envelope, token) =>
            {
                foreach (var change in envelope.Message.Changes.Flatten())
                {
                    switch (change)
                    {
                    case RoadSegmentAddedToEuropeanRoad europeanRoad:
                        await context.RoadSegmentEuropeanRoadAttributes.AddAsync(new RoadSegmentEuropeanRoadAttributeRecord
                        {
                            Id            = europeanRoad.AttributeId,
                            RoadSegmentId = europeanRoad.SegmentId,
                            DbaseRecord   = new RoadSegmentEuropeanRoadAttributeDbaseRecord
                            {
                                EU_OIDN   = { Value = europeanRoad.AttributeId },
                                WS_OIDN   = { Value = europeanRoad.SegmentId },
                                EUNUMMER  = { Value = europeanRoad.Number },
                                BEGINTIJD = { Value = LocalDateTimeTranslator.TranslateFromWhen(envelope.Message.When) },
                                BEGINORG  = { Value = envelope.Message.OrganizationId },
                                LBLBGNORG = { Value = envelope.Message.Organization }
                            }.ToBytes(manager, encoding)
                        });
                        break;
                    }
                }
            });
        }
示例#26
0
        private static async Task TestRandomInner(HybridCache cache, TestParams options, ITestLoggerFactory loggerFactory, CancellationToken cancellationToken)
        {
            var data        = new byte[options.FileSize];
            var dataSegment = new ArraySegment <byte>(data);
            var contentType = "application/octet-stream";

            async Task <Tuple <string, ArraySegment <byte> > > DataProvider(CancellationToken token)
            {
                if (options.CreationTaskDelay.Ticks > 0)
                {
                    await Task.Delay(options.CreationTaskDelay, cancellationToken);
                }
                if (options.CreationThreadSleep.Ticks > 0)
                {
                    Thread.Sleep(options.CreationThreadSleep);
                }
                return(new Tuple <string, ArraySegment <byte> >(contentType, dataSegment));
            }

            var random = new Random(options.Seed);
            var tasks  = new List <Task <Tuple <TimeSpan, string> > >();


            var swTotal = Stopwatch.StartNew();

            for (var wave = 0; wave < options.RequestWaves; wave++)
            {
                if (wave != 0)
                {
                    Thread.Sleep(options.RequestWavesIntermission);
                }
                Console.Write("Wave {0}, {1} requests...", wave + 1, options.RequestCountPerWave);
                var sw = Stopwatch.StartNew();
                var memoryStreamManager =
                    new RecyclableMemoryStreamManager(Math.Max(2, options.FileSize), 2, options.FileSize * 2 + 2);
                for (var ix = 0; ix < options.RequestCountPerWave; ix++)
                {
                    Func <Task <Tuple <TimeSpan, string> > > task = async() =>
                    {
                        var whichFile   = random.Next(options.FileCount);
                        var key         = BitConverter.GetBytes(whichFile);
                        var itemSw      = Stopwatch.StartNew();
                        var cacheResult = await cache.GetOrCreateBytes(key, DataProvider, cancellationToken,
                                                                       options.RetrieveContentType);

                        if (cacheResult.Data != null)
                        {
                            await using (cacheResult.Data)
                            {
                                await using var ms = memoryStreamManager.GetStream();
                                await cacheResult.Data.CopyToAsync(ms, cancellationToken);
                            }
                        }

                        itemSw.Stop();
                        return(new Tuple <TimeSpan, string>(itemSw.Elapsed, cacheResult.Status));
                    };
                    if (options.Synchronous)
                    {
                        var result = await task();

                        tasks.Add(Task.FromResult(result));
                    }
                    else
                    {
                        tasks.Add(Task.Run(task, cancellationToken));
                    }
                }

                await Task.WhenAll(tasks);

                sw.Stop();
                var swAsync = Stopwatch.StartNew();
                await cache.AwaitEnqueuedTasks();

                swAsync.Stop();
                Console.WriteLine("completed in {0}, plus {1} for async tasks. ", sw.Elapsed, swAsync.Elapsed);
                PrintDiskUtilization(options);
            }

            swTotal.Stop();

            Console.WriteLine("Completed all waves in {0}", swTotal.Elapsed);
            Console.WriteLine();

            // Accumulate results
            var resultCounts = new Dictionary <string, int>();
            var resultTimes  = new Dictionary <string, List <TimeSpan> >();

            foreach (var t in tasks)
            {
                var key = t.Result.Item2;
                if (resultCounts.TryGetValue(key, out var value))
                {
                    resultCounts[key] = value + 1;
                }
                else
                {
                    resultCounts[key] = 1;
                    resultTimes[key]  = new List <TimeSpan>();
                }
                resultTimes[key].Add(t.Result.Item1);
            }

            foreach (var pair in resultCounts.OrderByDescending(p => p.Value))
            {
                Console.WriteLine("{0} - {1} occurrences - {2}kb - 1st percentile {3} 5th percentile = {4} 50th percentile = {5} 95th percentile = {6} 99th percentile = {7}",
                                  pair.Key, pair.Value,
                                  pair.Value * options.FileSize / 1000,
                                  GetPercentile(resultTimes[pair.Key], 0.01f),
                                  GetPercentile(resultTimes[pair.Key], 0.05f),
                                  GetPercentile(resultTimes[pair.Key], 0.5f),
                                  GetPercentile(resultTimes[pair.Key], 0.95f),
                                  GetPercentile(resultTimes[pair.Key], 0.99f));
            }

            var logCounts     = new Dictionary <string, int>();
            var logEntryCount = 0;

            foreach (var e in loggerFactory.Sink.LogEntries)
            {
                logEntryCount++;
                var key = e.OriginalFormat;
                if (logCounts.TryGetValue(key, out var value))
                {
                    logCounts[key] = value + 1;
                }
                else
                {
                    logCounts[key] = 1;
                }
            }

            foreach (var pair in logCounts)
            {
                var percent = pair.Value * 100.0 / logEntryCount;
                Console.WriteLine("{0:00.00}% ({1} of {2}) log entries were {3}", percent, pair.Value, logEntryCount, pair.Key);
            }
        }
示例#27
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RequestResponseLoggingMiddleware"/> class.
 /// </summary>
 /// <param name="next">The next.</param>
 public RequestResponseLoggingMiddleware(RequestDelegate next)
 {
     _next = next;
     _recyclableMemoryStreamManager = new RecyclableMemoryStreamManager();
 }
示例#28
0
 public PacketPackager(RecyclableMemoryStreamManager memoryStreamMgr)
 {
     _memoryStreamMgr = memoryStreamMgr;
 }
示例#29
0
 public void GlobalSetup()
 {
     this.data          = new byte[this.Length];
     this.data2         = new byte[this.Length];
     this.memoryManager = new RecyclableMemoryStreamManager();
 }
 public RetrieveTransactionResourceTests(HttpIntegrationTestFixture <Startup> fixture)
 {
     _client = fixture.Client;
     _recyclableMemoryStreamManager = fixture.RecyclableMemoryStreamManager;
 }
示例#31
0
        public RoadNodeRecordProjection(RecyclableMemoryStreamManager manager, Encoding encoding)
        {
            if (manager == null)
            {
                throw new ArgumentNullException(nameof(manager));
            }
            if (encoding == null)
            {
                throw new ArgumentNullException(nameof(encoding));
            }

            When <Envelope <ImportedRoadNode> >(async(context, envelope, token) =>
            {
                var typeTranslation = RoadNodeType.Parse(envelope.Message.Type).Translation;
                var dbaseRecord     = new RoadNodeDbaseRecord
                {
                    WK_OIDN   = { Value = envelope.Message.Id },
                    WK_UIDN   = { Value = envelope.Message.Id + "_" + envelope.Message.Version },
                    TYPE      = { Value = typeTranslation.Identifier },
                    LBLTYPE   = { Value = typeTranslation.Name },
                    BEGINTIJD = { Value = envelope.Message.Origin.Since },
                    BEGINORG  = { Value = envelope.Message.Origin.OrganizationId },
                    LBLBGNORG = { Value = envelope.Message.Origin.Organization }
                };

                var point             = GeometryTranslator.FromGeometryPoint(Core.GeometryTranslator.Translate(envelope.Message.Geometry));
                var pointShapeContent = new PointShapeContent(point);

                await context.RoadNodes.AddAsync(new RoadNodeRecord
                {
                    Id = envelope.Message.Id,
                    ShapeRecordContent       = pointShapeContent.ToBytes(manager, encoding),
                    ShapeRecordContentLength = pointShapeContent.ContentLength.ToInt32(),
                    DbaseRecord = dbaseRecord.ToBytes(manager, encoding),
                    BoundingBox = RoadNodeBoundingBox.From(pointShapeContent.Shape)
                }, token);
            });

            When <Envelope <RoadNetworkChangesBasedOnArchiveAccepted> >(async(context, envelope, token) =>
            {
                foreach (var message in envelope.Message.Changes.Flatten())
                {
                    switch (message)
                    {
                    case RoadNodeAdded node:
                        var typeTranslation = RoadNodeType.Parse(node.Type).Translation;
                        var dbaseRecord     = new RoadNodeDbaseRecord
                        {
                            WK_OIDN   = { Value = node.Id },
                            WK_UIDN   = { Value = node.Id + "_0" },  // 1?
                            TYPE      = { Value = typeTranslation.Identifier },
                            LBLTYPE   = { Value = typeTranslation.Name },
                            BEGINTIJD = { Value = LocalDateTimeTranslator.TranslateFromWhen(envelope.Message.When) },
                            BEGINORG  = { Value = envelope.Message.OrganizationId },
                            LBLBGNORG = { Value = envelope.Message.Organization }
                        };

                        var point             = GeometryTranslator.FromGeometryPoint(Core.GeometryTranslator.Translate(node.Geometry));
                        var pointShapeContent = new PointShapeContent(point);

                        await context.RoadNodes.AddAsync(new RoadNodeRecord
                        {
                            Id = node.Id,
                            ShapeRecordContent       = pointShapeContent.ToBytes(manager, encoding),
                            ShapeRecordContentLength = pointShapeContent.ContentLength.ToInt32(),
                            DbaseRecord = dbaseRecord.ToBytes(manager, encoding),
                            BoundingBox = RoadNodeBoundingBox.From(pointShapeContent.Shape)
                        }, token);
                        break;
                    }
                }
            });
        }
        private void TestDroppingLargeBuffer(long maxFreeLargeBufferSize)
        {
            const int BlockSize = 100;
            const int LargeBufferMultiple = 1000;
            const int MaxBufferSize = 8000;

            for (var size = LargeBufferMultiple; size <= MaxBufferSize; size += LargeBufferMultiple)
            {
                var memMgr = new RecyclableMemoryStreamManager(BlockSize, LargeBufferMultiple, MaxBufferSize)
                             {
                                 AggressiveBufferReturn = this.AggressiveBufferRelease,
                                 MaximumFreeLargePoolBytes = maxFreeLargeBufferSize
                             };

                var buffers = new List<byte[]>();

                //Get one extra buffer
                var buffersToRetrieve = (maxFreeLargeBufferSize > 0) ? (maxFreeLargeBufferSize / size + 1) : 10;
                for (var i = 0; i < buffersToRetrieve; i++)
                {
                    buffers.Add(memMgr.GetLargeBuffer(size, DefaultTag));
                }
                Assert.That(memMgr.LargePoolInUseSize, Is.EqualTo(size * buffersToRetrieve));
                Assert.That(memMgr.LargePoolFreeSize, Is.EqualTo(0));
                foreach (var buffer in buffers)
                {
                    memMgr.ReturnLargeBuffer(buffer, DefaultTag);
                }
                Assert.That(memMgr.LargePoolInUseSize, Is.EqualTo(0));
                if (maxFreeLargeBufferSize > 0)
                {
                    Assert.That(memMgr.LargePoolFreeSize, Is.LessThanOrEqualTo(maxFreeLargeBufferSize));
                }
                else
                {
                    Assert.That(memMgr.LargePoolFreeSize, Is.EqualTo(buffersToRetrieve * size));
                }
            }
        }