我有一个wcf服务,我使用下面的配置值。
maxItemsInObjectGraph="2147483647"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
一切正常,但我的服务不断占用记忆。我已经缩小了问题,并且它占用大量内存的原因是因为它没有释放这些未使用的缓冲区大小。当我使用defalt值时,它的工作正常,没有太多的内存。
有没有办法可以让服务声明未使用的空间?
答案 0 :(得分:0)
我很好奇你是如何确定这些设置是问题的原因,以及你正在考虑什么来确定内存使用情况,以及你让它运行的请求的时间和数量。
在几次请求后,您是否收到OutOfMemory异常?
请注意,2147483647字节为2GB,因此如果这些缓冲区已完全分配且未释放,则在内存不足之前需要大约2或3个请求。
你确定内存不是GC,因为没有理由吗?如果堆空间可用且在某些阈值之下,那么花费时间GC的东西没有太多理由。
编辑:
您可能还会根据这些创建的缓冲区和对象的大小看到不同的内存使用情况。 Some of this is outlined here.基本上.net将超过85,000字节的对象视为“大”并以不同方式压缩它们。
但是,如果你从未得到内存异常或实际上内存不足,那么你可能没有问题。 “不同”的内存使用并不意味着它是“错误的”。您应该加载测试您的应用程序,看看它是否实际耗尽内存,这将表明真正的内存泄漏。否则,它可能只是建立内存,直到它接近最大堆基因大小然后GC一切。