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

无锡祥搜做网站推广景德镇seo

无锡祥搜做网站推广,景德镇seo,wordpress本地nginx,装修公司加盟十大品牌概要 我们在开发过程中,经常需要在一个很大的数组或集合中搜索元素,以满足业务需求。 本文主要介绍通过使用yield return的方式,避免将大量数据全部加载进入内存,再进行处理。从而提高程序的性能。 设计和实现 基本业务场景&a…

概要

我们在开发过程中,经常需要在一个很大的数组或集合中搜索元素,以满足业务需求。

本文主要介绍通过使用yield return的方式,避免将大量数据全部加载进入内存,再进行处理。从而提高程序的性能。

设计和实现

基本业务场景,我们需要在10000台ATM的数据中找前100台品牌是BrandA的ATM机的数据。

我们不再使用传统的方式,将10000台ATM机的数据全部载入内容,再进行过滤查找。

我们通过yield return方式,只返回一个迭代器,代码如下:

本例中,存在BrandA和BrandB两个品牌,在生成ATM的L集合序列时候,每次都是随机生成ATM机的品牌。

public IEnumerable<ATM> getATMListYield(){List<ATM> atms = new List<ATM>();int count = 0;for(var i=0; i< 10000; ++i){yield return new ATM (){Id = i,Name = "Atm" + i,Brand =  getBrand()} ;}yield break;
}
private string getBrand(){Random rd = new Random();int count = rd.Next(100);if (count >= 50) return "BrandA";return "BrandB";
}

调用getATMListYield,进行过滤,找到前100个BrandA的ATM机。完整代码,请参考附录。

 public void runGetList(){DataProvider dp = new DataProvider();var lists = dp.getATMList();var count = 0;foreach(var atm in lists){if(atm.Brand == "BrandA") {Console.WriteLine(atm.Name );++ count;}if (count == 100){break;}}}

在foreach循环中,每次访问ATM的集合,只将集合中的一个元素载入内存,进行过滤和比较,当找到100个BrandA的元素,程序停止,不再载入ATM数组的其它元素。

载入全部ATM数据,再进行过滤的代码请见附录。

我们使用Benchmark对两种实现的性能进行测试,测试结果如下:

在这里插入图片描述
从测试结果中,可以看出,使用yield return方式,运行时间几乎减少了一半。

由于不需要将全部ATM数据载入内容,yield return方式的内存使用量,仅仅相当于传统方法的2%左右。

附录

Programs.cs

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 void runGetList(){DataProvider dp =new DataProvider();var lists = dp.getATMList();var count = 0;foreach(var atm in lists){if(atm.Brand == "BrandA") {Console.WriteLine(atm.Name );++ count;}if (count == 100){break;}}}[Benchmark]public void runGetListByYield(){DataProvider dp =new DataProvider();var lists = dp.getATMListYield();int count = 0;foreach(var atm in lists){if(atm.Brand == "BrandA") {Console.WriteLine(atm.Name );++ count;}if (count == 100){break;}}}public static void Main(string[] args){var summary = BenchmarkRunner.Run<Programs>();      }}
}

DataProvider.cs

using System;
using System.Linq;
using System.Collections.Generic;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Diagnosers;namespace IQueryableIEnumerable
{public class DataProvider {public IEnumerable<ATM> getATMList(){List<ATM> atms = new List<ATM>();for(var i=0; i< 10000; ++i){atms.Add(new ATM (){Id = i,Name = "Atm" + i,Brand =  getBrand()});}return atms;}public IEnumerable<ATM> getATMListYield(){List<ATM> atms = new List<ATM>();int count = 0;for(var i=0; i< 10000; ++i){yield return new ATM (){Id = i,Name = "Atm" + i,Brand =  getBrand()} ;}yield break;}private string getBrand(){Random rd = new Random();int count = rd.Next(100);if (count >= 50) return "BrandA";return "BrandB";}}
}

ATM.cs

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace IQueryableIEnumerable
{public class ATM {public int Id { get; set; }public string Name { get; set; }public string Brand {get;set;}      }
}
http://www.zhongyajixie.com/news/24908.html

相关文章:

  • 做网站卖草坪赚钱吗百度快速收录入口
  • godaddy如何买wordpress搜索引擎排名优化seo课后题
  • 广州远洋建设实业公司网站排名第一的助勃药
  • bootstrap模板网站苏州百度推广代理商
  • python做网站源码seo关键词排名优化哪好
  • 公众平台网站建设哪家专业品牌推广百度seo
  • 做海报一般都去什么网站看怎么上百度推广产品
  • web网站开发用什么语言微信营销的模式有哪些
  • 专业的佛山网站建设公司网站引流推广
  • 人才招聘网站模板html电子报刊的传播媒体是什么
  • 网站建设 镇江河南平价的seo整站优化定制
  • 个人网站备案费用营销推广的形式包括
  • 南京谁做免费网站网上营销
  • 专业的河南网站建设公司排名河南品牌网络推广外包
  • 做网站的为什么不给域名和密码百度售后服务电话人工
  • 网站建设dwm搜索最多的关键词的排名
  • 网站创建费用软文推广是什么意思
  • 微信分销平台系统自己怎么优化网站
  • 上饶网站设计公司青岛seo整站优化公司
  • h5 网站建设国内真正的免费建站
  • 如何绑定网站域名解析互联网广告平台排名
  • 张家港做网站优化排名公司做个网站多少钱
  • 桥东企业做网站seo站长工具
  • 上海松江区做网站公司企业网站营销的实现方式
  • 朝阳网站建设推广临沂做网站的公司
  • 温州网站排名优化宁波网站推广大全
  • 做复刻衣服买网站网络营销人员招聘
  • 搜索引擎网站提交微信公众号的推广
  • 通辽网站开发0475seo适合30岁女人的培训班
  • 自己购买域名做网站新网站快速排名软件