WCF 和 .NET Framework 4.8 内存消耗高

问题描述 投票:0回答:1

我正在努力解决内存消耗问题,我使用了 dotMemory,结果看起来像在第一个屏幕上。

内存消耗

占用内存最多的是 System、Castle (3.3.0) 和 NHibernate (v. 4.1.0) 当我展开有关系统的信息时,我发现问题出在 String、Collection 上。 Castle中是Default Kernel拥有最大的内存和LifecycledComponentsReleasePolicy。 我正在寻找 Castle 的解决方案,但我不知道如何解决系统和 NHiberante 的问题 你有过期的吗?任何人都可以给我一些提示,因为我看到 GC 起作用了

内存图表

目前我正在寻找任何解决方案并测试我在 Google 找到的想法

wcf memory-leaks .net-4.8
1个回答
0
投票

一般来说,WCF 中控制资源的方式是通过配额控制器

首先可以设置超时时间,这样可以节省很多资源。例如:

ChannelInitializationTimeout:初始读取期间等待连接发送前导码的最长时间。

CloseTimeout:传输抛出异常之前等待连接关闭的最长时间。

IdleTimeout:池连接在关闭之前可以保持空闲的最长时间。

LeaseTimeout:已池化的活动连接的最大生命周期。指定时间过后,当前请求一处理完,连接就会关闭。

OpenTimeout:传输抛出异常之前等待建立连接的最长时间。

ReceiveTimeout:传输抛出异常之前等待读取操作完成的最长时间。

SendTimeout:传输抛出异常之前等待写入操作完成的最长时间。

其次,您还可以限制传输大小:

ConnectionBufferSize:底层传输的发送和接收缓冲区的大小(以字节为单位)。发送较大消息时,增加缓冲区大小可以提高吞吐量。

ListenBacklog:侦听器可以拥有的在与该端点的其他连接被拒绝之前尚未得到服务的最大连接数。

MaxBufferPoolSize:传输用于形成可重用消息缓冲区池的最大内存(以字节为单位)。当池无法提供消息缓冲区时,系统会分配一个新的缓冲区临时使用。

MaxBufferSize:用于流式传输数据的缓冲区的最大大小(以字节为单位)。

MaxOutboundConnectionsPerEndpoint:可以与特定端点关联的最大传出连接数。

MaxReceivedMessageSize :接收到的消息的最大大小(以字节为单位),包括标头;超过这个大小,传输将会抛出异常。

对于控制器,ServiceThrottle.MaxConcurrentSessions是一个应用程序级控制器,默认将并发会话通道连接数限制为不超过10个。这些控件旨在针对某些类型的攻击提供开箱即用的缓解措施,或提高内存要求、启动时间等性能指标。

© www.soinside.com 2019 - 2024. All rights reserved.