• .net不开线程的异步


    委托的BeginInvoke方法并不能获得IOCP支持,这会使用一个额外的线程来执行任务,这样不但没有节省,返而会降低性能。

    以下操作基于IOCP实现:

    • FileStream操作:BeginRead、BeginWrite。调用BeginRead/BeginWrite时会发起一个异步操作,但是只有在创建FileStream时传入FileOptions.Asynchronous参数才能获取真正的IOCP支持,否则BeginXXX方法将会使用默认定义在Stream基类上的实现。Stream基类中BeginXXX方法会使用委托的BeginInvoke方法来发起异步调用——这会使用一个额外的线程来执行任务。虽然当前调用线程立即返回了,但是数据的读取或写入操作依旧占用着另一个线程(IOCP支持的异步操作时不需要线程的),因此并没有任何“节省”,反而还很有可能降低了应用程序的性能,因为额外的线程切换会造成性能损失。
    • DNS操作:BeginGetHostByName、BeginResolve。
    • Socket操作:BeginAccept、BeginConnect、BeginReceive等等。
    • WebRequest操作:BeginGetRequestStream、BeginGetResponse。
    • SqlCommand操作:BeginExecuteReader、BeginExecuteNonQuery等等。这可能是开发一个Web应用时最常用的异步操作了。如果需要在执行数据库操作时得到IOCP支持,那么需要在连接字符串中标记Asynchronous Processing为true(默认为false),否则在调用BeginXXX操作时就会抛出异常。
    • WebServcie调用操作:例如.NET 2.0或WCF生成的Web Service Proxy中的BeginXXX方法、WCF中ClientBase<TChannel>的InvokeAsync方法。
  • 相关阅读:
    unicode编码 utf8
    贝壳IM群聊优化之路
    企点电话SDK的日志追踪系统 https://mp.weixin.qq.com/s/uipndTV8W5s1_qose8MrQQ
    解码未知键的 json 字符串
    内部类
    牛客IOI周赛23普及组全题解
    20以内加减随机试卷
    2929百万级电商平台即时通讯系统设计实践(2)_ev
    org.objectweb.asm.ClassWriter.<init>(I)V异常 .
    VMware安装与卸载CentOS7 详细步骤版本2
  • 原文地址:https://www.cnblogs.com/h1nson/p/9233709.html
Copyright © 2020-2023  润新知