.net socket吞吐能力測試結果


    MS給.NET的socket異步提供了IOCP的支持,對於IOCP這個模型來說相信做過網絡應用的朋友都清楚他的性能。但經過.NET的包裝后他的性能又是怎樣呢?以下是.NET Socket的吞吐能力測試結果。測試服務端的配置為Core E4300 1.8g 2g內存win2003sp2,配置似乎有點舊,但這樣更容易體現.NET Socket的性能.

單一對象應答

客戶端發起一個請求,服務器應答后客戶端再進行下一次請求.

請求對象

    public class Get : IMessage
    {
        public string ID;
    }

應答對象 

                GetResponse response = new GetResponse();
                response.User = new User();
                response.User.Name = "henryfan";
                response.User.EMail = "henryfan@msn.com";
                response.User.City = "guangzhou";
                response.User.Counrty = "china";
                response.User.ID = 2324;
                response.User.Age = 45;
                response.User.BirthDay = 45454545;
                response.User.Enabled = true;
                response.User.FData = 4454.45f;
                response.User.DData = 34343242.242;

不同連接情況下的測試結果

列表對象應答

客戶端發起一個請求,服務器應答后客戶端再進行下一次請求. 

請求對象

    class Request : IMessage
    {
    }

應答對象 

                Response response = new Response();
                for (int i = 0; i < 5; i++)
                {
                    Order order = new Order();
                    order.OrderID = 10248;
                    order.CustomerID = "WILMK";
                    order.EmployeeID = 5;
                    order.OrderDate = 629720352000000000;
                    order.RequiredDate = 629744544000000000;
                    order.ShipAddress = "59 rue de l'Abbaye";
                    order.ShipCity = "Reims";
                    order.ShipCountry = "France";
                    order.ShipName = "Vins et alcools Chevalier";
                    order.ShipPostalCode = "51100";
                    order.ShipRegion = "RJ";
                    response.Orders.Add(order);
                }

測試結果

帶寬受限,因此只能測試1000連接

高連接並發

客戶端每隔一秒請求發出一個請求

請求對象

                    Register register = new Register();
                    register.UserName = "henryfan";
                    register.EMail = "henryfan@msn.com";

應答對象

                User user= new User();
                user.Name = "henryfan";
                user.EMail = "henryfan@msn.com";
                user.City = "guangzhou";
                user.Counrty = "china";
                user.ID = 2324;
                user.Age = 45;
                user.BirthDay = 45454545;
                user.Enabled = true;
                user.FData = 4454.45f;
                user.DData = 34343242.242;

不同連接測試結果

    從以上得到的數據來看,.NET提供的Socket吞吐能力還是很不錯的,比較保守的計算在5年前的普通家用PC滿負載的情況最低也可以處理5W的send+5w的receive的IO操作。為什么說是保守呢,因為以上測試所包括的並不僅僅是Socket吞吐,還有協議的分析對象的序列化等等工作。從后面的測試情況看,連接數並不是影響性能的主要因素,可以說存在的影響非常少,所以在設計的時候並沒有必要注意在連接數上;在一些交流過程很多人第一時間關心這個在此提醒一下。看完這個結果相信對.NET Socket吞吐能力不了解的朋友應該大體上的了解,需要做這方面應用的朋友好好地利用它的,它的性能真的不錯.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM