Eni*_*nio 12 c# mono performance scalability server-side
我在Visual Studio 2010和Mono Develop 2.8上都开发了一个C#服务器.NET Framework 4.0
看起来这台服务器在Windows上比在Linux上表现得更好(在可扩展性方面).我使用Apache的ab工具在本机Windows(12个物理内核),8和12个内核Windows和Ubuntu虚拟机上测试了服务器可扩展性.
窗口响应时间非常平坦.当并发级别接近/克服核心数量时,它开始上升.
由于某种原因,Linux的响应时间要糟糕得多.从并发级别5开始,它们几乎呈线性增长.此外,8核和12核Linux VM的行为也相似.
所以我的问题是:为什么它在Linux上表现更差?(我该如何解决这个问题?).
请查看附带的图表,它显示了满足75%请求的平均时间作为请求并发的函数(范围栏设置为50%和100%).

我有一种感觉,这可能是由于mono的垃圾收集器.我尝试使用GC设置,但我没有成功.有什么建议吗?
一些其他背景信息:服务器基于HTTP侦听器,可快速解析请求并在线程池上对它们进行排队.线程池负责用一些密集的数学回复那些请求(计算约10秒的答案).
您需要首先隔离问题所在。首先使用HeapShot监控内存使用情况。如果不是内存问题,则分析您的代码以查明耗时的方法。
此页面“性能提示:编写性能更好的 .NET 和 Mono 应用程序”包含一些有用的信息,包括使用 mono 分析器。
过多的字符串操作和装箱通常是代码扩展性不佳的“隐藏”罪魁祸首。