.NET Core

初览的应用场景为游戏服务器开发。所以测试在侧重点上更强于IO和密集型计算

网络IO:

NetCore:60%CPU QPS 56W

C++:31%CPU QPS 58W

C++:68%CPU QPS 124W

C#测试代码

  1. using System;
  2. using System.IO;
  3. using System.Net;
  4. using System.Net.Sockets;
  5. using System.Threading;
  6. using System.Collections;
  7. using System.Collections.Generic;
  8. namespace ConsoleApp2
  9. {
  10. class Session
  11. {
  12. public TcpClient client = null;
  13. public void Go()
  14. {
  15. client.GetStream().BeginRead(bytes, pos, 32 - pos, AsyncReadCallback, this);
  16. }
  17. void AsyncReadCallback(IAsyncResult ar)
  18. {
  19. if (ar.IsCompleted)
  20. {
  21. var sess = ar.AsyncState as Session;
  22. sess.client.GetStream().BeginWrite(sess.bytes, sess.pos, 32, AsyncWriteCallback, sess);
  23. }
  24. }
  25. void AsyncWriteCallback(IAsyncResult ar)
  26. {
  27. if (ar.IsCompleted)
  28. {
  29. var sess = ar.AsyncState as Session;
  30. sess.client.GetStream().BeginRead(sess.bytes, sess.pos, 32, AsyncReadCallback, sess);
  31. }
  32. }
  33. int pos = 0;
  34. byte[] bytes = new byte[32];
  35. }
  36. class Program
  37. {
  38. static void worker(object obj)
  39. {
  40. while(true)
  41. {
  42. Thread.Sleep(1);
  43. lock(obj)
  44. {
  45. var que = obj as Queue<Session>;
  46. if(que.Count>0)
  47. {
  48. que.Dequeue().Go();
  49. }
  50. }
  51. }
  52. }
  53. static void Main(string[] args)
  54. {
  55. var ss = new TcpListener(12125);
  56. ss.Start();
  57. var bytes = new byte[32];
  58. var ths = new Thread[50];
  59. var que = new Queue<Session>[50];
  60. int i = 0;
  61. foreach(var p in ths)
  62. {
  63. que[i] = new Queue<Session>();
  64. ths[i] = new Thread( (worker));
  65. ths[i].Start(que[i]);
  66. ++i;
  67. }
  68. int balance = 0;
  69. while (true)
  70. {
  71. balance = ++balance % que.Length;
  72. var sess = new Session();
  73. var task = ss.AcceptTcpClientAsync();
  74. while (task.IsCompleted == false)
  75. {
  76. var cli = task.Result;
  77. sess.client = cli;
  78. lock (que[balance])
  79. {
  80. que[balance].Enqueue(sess);
  81. }
  82. }
  83. }
  84. ss.Stop();
  85. Console.WriteLine("Hello World!");
  86. }
  87. }
  88. }

TODO

来源:http://www.1994july.club/seo/

.NET Core初览的更多相关文章

  1. UWP开发入门系列笔记之(一):UWP初览

    标签: 随着微软Build2015带来的好消息,Win10正式版发布的日子已经离我们越来越近了,我们也终于欣喜地看到:一个统一的Windows平台对于开发人员来说充满了吸引力,这局棋下的好大的说--于 ...

  2. Hadoop源码学习笔记(3) ——初览DataNode及学习线程

    Hadoop源码学习笔记(3) ——初览DataNode及学习线程 进入了main函数,我们走出了第一步,接下来看看再怎么走: public class DataNode extends Config ...

  3. UML初览(转)

    原文:UML初览 本章使用一个简单的例子对UML中所使用的概念和视图进行初览.本章的目的是要将高层UML概念组织成一系列较小的视图和图表来可视化说明这些概念,说明如何用各种不同的概念来描述一个系统以及 ...

  4. Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)

    目录 SignalR系列目录(注意,是ASP.NET的目录.不是Core的) 前言 一晃一个月又过去了,上个月有个比较大的项目要验收上线.所以忙的脚不沾地.现在终于可以忙里偷闲,写一篇关于Signal ...

  5. .NET Core 初体验

    .NET Core 作为微软的开源项目,neter 们对之的期待还是挺大的. 以前也看过,接触过,摸索建了几个示例项目,今天就罗列下自己的初体验. .NET Core 安装.帮助等 安装的话,直接官网 ...

  6. 利用VSCode进行.Net Core初尝试

    1.下载.Net Core,https://www.microsoft.com/net/core#windows,按照页面提示进行SDK的安装. 2.下载VsCode,https://www.visu ...

  7. .NET Core初体验 - 在Mac下运行第一个Web示例程序

    要说最近两天程序猿之间最喜欢吹水的事是什么?那绝壁是甲骨文要放弃Java!简直做梦都要笑醒!由于公司的产品线全面转向Java,最近几个月也一直在苦学Java技术.已经默默决定了,如果消息证实是真的,我 ...

  8. .NET Core初体验 在window上构建第一个app

    ASP.NET Core 是一个跨平台,高性能的开源框架,用于构建现代化的,基于云的互联网应用程序.使用 ASP.NET Core ,您可以: 构建Web应用程序和服务,IoT应用程序和移动后端. 在 ...

  9. Visual Studio Code 学习.net core初体验

    一,安装 最近在用 Visual Studio Code 学习.net core ,记录下学习的过程,首先去官网下载最新的.net core2.1安装包,有windows 和mac,根据自己的开发环境 ...

随机推荐

  1. QT中PRO文件解析(转)

    From csdn blog: QT中PRO文件写法的详细介绍,很有用,很重要! 在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下: ...

  2. myeclipse 相关问题

    [如何设置 Tab 键为四个空格] https://blog.csdn.net/QQ826688096/article/details/90543252

  3. [WinForm] - 关闭应用时 "has stopped working" 之解决

    背景 关闭 WinForm 应用出现 "has stopped working" 错误. Windows 日志 Faulting application name: PcClien ...

  4. [SQL] - 报表查询效率优化

    背景 系统将数据对象JSON序列化后存放到数据库字段中.Report 模块需要获取实时数据对象数值,当前在SQL中进行数值判断的耗时长,效率低. 分析 当前执行效率低主要是程序结构设计的不合理. SQ ...

  5. python学习-51 shelve模块

    import shelve f=shelve.open(r'shelve') #f['stu_info'] = {'name':'john','age':'18'} #f['stu2_info'] = ...

  6. ALV报表——基础(一)

    目录 一.ALV的简介 二.程序实现 2.1.实现步骤 2.2.代码示例 三.Layout.Fieldcat相关属性,ALV输出函数 3.1.Layout相关属性 3.2.Fieldcat相关属性 3 ...

  7. PB笔记之验证必填(pfc_validation)

    pfc_validation事件中可以在保存时进行提示

  8. WPF GridView动态添加项并读取数据

    假设数据库有如下表, 首先我们创建一个WPF工程,界面如下 <Window x:Class="WpfApplication2.MainWindow" xmlns=" ...

  9. 表单送件前的Check(二) (未完)

    #region 新增表单前的Check动作 public static void NewFormRequestCheck(string _FormID, string _VocaEmpID, stri ...

  10. Jquery DataTables 服务器后端分页 Ajax请求添加自定义参数.

    项目使用AdminLTE(基于Bootstrap 二次开发的框架)作为开发框架. 使用DataTables 的时候部分页面需要传参 给后台做筛选过滤. 但是不知道怎么将DataTables的参数 和自 ...