关于WCF返回大数据时内存不会回收的问题。
我的WCF寄宿在一个windows服务中,客户端是一个应用程序。我发现WCF服务接口函数返回一个大数据的时候,服务端内存存在不会被回收的情况。服务端:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single)]
public class AlarmCenterDatabaseService : IAlarmCenterDatabaseService
{
......
public byte[] test()
{
byte[] bs = new byte[1024 * 1024 * 100];
return bs;
}
......
}
客户端:
private void GWButton_Click(object sender, RoutedEventArgs e)
{
byte[] bs;
bs = AlarmCenter.DataCenter.DataCenter.db_proxy.test();
}
客户端和服务端采用管道或者TCP/IP方式连接:
if (csIP == General.GetHostIP())
db_cf = new ChannelFactory<IAlarmCenterDatabaseService>(PipBind, "net.pipe://localhost/AlarmCenterWcfServiceLibrary/AlarmCenterDatabaseService/");
else
db_cf = new ChannelFactory<IAlarmCenterDatabaseService>(bind, "net.tcp://" + csIP + "/AlarmCenterWcfServiceLibrary/AlarmCenterDatabaseService/");
问题:每调用一次test(),内存都会增加一点,增加到一定程度,内存基本上处于一个平衡的波动,不会一直增长。当我把客户端关闭掉,内存会降低一点,但还是回比调用test()前要大很多,而且不会回收。 --------------------编程问答-------------------- --------------------编程问答-------------------- 调用GC.Collect()看看, --------------------编程问答-------------------- 写一个方法调用GC.Collect(),
补充:.NET技术 , C#