当前位置:  开发笔记 > 编程语言 > 正文

使用net.tcp实现WCF

如何解决《使用net.tcp实现WCF》经验,为你挑选了1个好方法。

我有一个内置ServiceHost的WCF net.tcp服务,在做一些压力测试时,我得到一个奇怪的行为.我第一次发送一堆请求时,会快速回答5到10个请求,其余请求以大约2秒的间隔返回.我第二次发送请求时,会快速返回10 - 20,并以2秒的间隔休息.

以上重复,直到我可以快速返回超过100个请求,但如果我等待一分钟左右,服务的内存使用率下降,请求返回到5-10快速返回.

我正在测试的服务有一个很小的延迟,所以我可以同时获得许多打开的连接,如果这个延迟被删除,请求返回得如此之快,以至于我可能同时打开2-5个连接.此延迟是模拟数据库连接和其他传出内容.

从行为来看,ServiceHost似乎正在分配一些东西,线程,类实例,但我无法弄清楚它是什么.

我可以在客户端调用服务来保持它的工作,但这似乎是一个糟糕的解决方案.

如果我对服务有很高的持续负载,它会迅速处理所有请求,但是如果我有一段低活动时间,那么服务中的连接数量会很慢.

我想我的问题是在WCF服务的高负载期间分配的内容是什么,我如何配置服务以预分配更多已分配的内容.

编辑:我做了一些测试,并查看taskmgr进程,我可以看到当servicehost'休息'时,有10个线程打开,但是当我开始发送请求时,threadcount会上升.只要threadcount很高,servicehost就可以快速处理传入的请求,但是如果我暂停发送请求,则open threadcount会减少,后续请求开始需要更长的时间来处理.

现在,我如何告诉servicehost保持一堆线程打开?或者超过默认保留的10-12?



1> Kim..:

好吧,经过大量的谷歌搜索,似乎问题是线程池.CLR线程池分配了几个线程,当它们被使用时,它会限制新线程的创建,并且在一段时间之后它还会释放未使用的线程.

对于一个错误存在一些混淆,这意味着ThreadPool不支持SetMinThreads调用.

http://www.michaelckennedy.net/blog/PermaLink,guid,708ee9c0-a1fd-46e5-8fa0-b1894ad6ce0f.aspx

我不确定这个bug是否已经解决,或者是什么,因为当我修改ThreadPool设置时,问题仍然存在.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有