当前位置: 首页 > news >正文

展会邀请函在哪个网站做游戏软件制作开发

展会邀请函在哪个网站做,游戏软件制作开发,福州开发公司,网站icp备案号概要 我们在开发过程中#xff0c;经常使用async的异步方法#xff0c;但是有些时候#xff0c;异步的方法中#xff0c;可能包含一些同步的处理。本文主要介绍通过ValueTask这个struct#xff0c;优化异步处理的方法性能。 代码及实现 有些时候我们会缓存一些数据在内…概要 我们在开发过程中经常使用async的异步方法但是有些时候异步的方法中可能包含一些同步的处理。本文主要介绍通过ValueTask这个struct优化异步处理的方法性能。 代码及实现 有些时候我们会缓存一些数据在内存中这些数据因为不经常改变所以并不需要每次都要从后台数据库中获取。 例如下面的代码 private static ListBranch _branches;public async TaskListBranch getBranches(){if (_branches is null){using (var context new BankContext()){_branches await context.Branches.ToListAsync();} }return _branches; }在一个银行App相关的系统中我们将分行的基本信息缓存在内存中方便其它方法调用。 上面的代码有一个问题无论我们的缓存是否命中都会以TaskList的形式返回。也就是说Runtime需要为返回Task相关的内容分配内存空间如果缓存命中意味着该方法仅仅是执行同步操作实际上只是一个同步操作。 如果以TaskList作为返回值对于同步操作而言完全是在浪费系统资源。Task是一个类这就意味着只要我们要使用该类就必须创建对象然后在通过GC收集。 对于一些高吞吐量高并发的站点如果可以对其进行适当优化可以节约大量资源。 ValueTask 解决方法 在.Net Core .2.0中引入一个结构体类型 ValueTask, 用于处理async方法中同步和异步返回并存的情况。 因为其只是一个结构体它并不需要像Task那样去创建对象再被GC收集。但是它却可以包裹TResult或Task作为async方法的返回值。 我们将上面的代码进行修改将Task替换成ValueTask即可 private static ListBranch _branches; public async ValueTaskListBranch getBranchesByTaskValue(){if (_branches is null){using (var context new BankContext()){_branches await context.Branches.ToListAsync();return _branches;} }return _branches; }我们用Benchmark测试上述两个方法的性能。 从测试结果上看ValueTask作为返回值消耗时间增加了约27%但是内存消耗几乎可以忽略不计。 全部代码请参考附录 附录 Programs.cs using System.Diagnostics; using System.Globalization; using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Runtime.CompilerServices; using System.Net.Mail; using System.ComponentModel.Design.Serialization; using System; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using System.Linq; using System.Collections.Generic; using BenchmarkDotNet.Running; using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Diagnosers; namespace IQueryableIEnumerable {[MemoryDiagnoser]public class Programs{[Benchmark]public async Task getBranches(){TaskValueTest task new TaskValueTest();for(var i0;i5;i){await task.getBranches();}}[Benchmark]public async Task getBranchesByValueTask(){TaskValueTest task new TaskValueTest();for(var i0;i5;i){await task.getBranchesByTaskValue();}}public static void Main(string[] args){var summary BenchmarkRunner.RunPrograms(); } } } TaskValueTest.cs namespace IQueryableIEnumerable {using System;using System.Threading;using System.Threading.Tasks;using Microsoft.EntityFrameworkCore;using System.Linq;using System.Collections.Generic;using BenchmarkDotNet.Running;using BenchmarkDotNet.Attributes;using BenchmarkDotNet.Diagnosers;public class TaskValueTest{private static ListBranch _branches;private static ListBranch _branches2;public async ValueTaskListBranch getBranchesByTaskValue(){if (_branches is null){using (var context new BankContext()){_branches await context.Branches.ToListAsync();} }return _branches;}public async TaskListBranch getBranches(){if (_branches2 is null){using (var context new BankContext()){_branches2 await context.Branches.ToListAsync();} }return _branches2;}} }
http://www.w-s-a.com/news/314138/

相关文章:

  • 电子商务网站建设与规划总结外链查询网站
  • 西安网站品牌建设做网站需要的东西
  • 网站外围网站怎么做移动端网站开发项目
  • 做网站只做前端可以用吗知更鸟免费 wordpress
  • html5 微信网站主流开发技术标准网站搭建费用
  • 加强统计局网站的建设和管理广州微信网站建设价格
  • 华宁网站建设设计公司 网站
  • 简历网站免费怎么查在哪个网站做的备案
  • 响应式网站 价格网站用哪些系统做的比较好用
  • 高端网站案例360做的网站
  • 瑞安地区建设网站公众号开发者工具是干嘛的
  • 请解释网站开发的主要流程.wordpress主体上传
  • 网站方案组成要素饰品公司网站建设方案
  • 网站改版被降权赣州景文网络科技有限公司
  • 吉林省网站建设推广图片模版
  • 如何做网站热力图佛山 网站关键词优化
  • 个人网站建设论文中期报告申报网站建设理由 模板
  • 岫岩做网站软件开发和app开发的区别
  • 邯郸质量一站式服务平台上线如何做国外销售网站
  • 内蒙古工程建设协会网站sem优化策略
  • Linux网站建设总结建设电子商务平台
  • 公司网站背景图片课程网站如何建设
  • 用js做简单的网站页面互联网技术对人力资源管理的影响有哪些
  • 银川做网站贵德县wap网站建设公司
  • 深圳网站建设zvge山西省煤炭基本建设局网站
  • 佛山网页网站设计线上怎么做推广和宣传
  • 多个域名绑定同一个网站案例
  • 建设网站都需要准备什么代理加盟微信网站建设
  • 网站备案没有了wordpress 添加按钮
  • 湖南建设银行宣传部网站福田蒙派克空调滤芯安装位置图