foreach (var item in list)
{
Devices _Device = DevicesLogic.GetInstance().GetDevices(item.DeviceID);
string addr = item.Address;
if (addr.Trim() == "")
{
addr = LocationAPI.GetAddressNew(item.OLat, item.OLng);
}
var ur = UserGroupRelationLogic.GetInstance().GetDeviceGroup(item.DeviceID, model.UserID);
var profile = PersonProfileLogic.GetInstance().GetProfileByDevice(item.DeviceID);
string Nickname = "";
if (profile != null)
Nickname = profile.Nickname ?? "";
if (ur != null && _Device != null && model.UserID != _Device.UserID && !ur.NickName.IsNullOrEmpty())
{
Nickname = ur.NickName;
}
}

 

var deviceLogic = DevicesLogic.GetInstance();
var userGroupRelationLogic = UserGroupRelationLogic.GetInstance();
var personProfileLogic = PersonProfileLogic.GetInstance(); Parallel.ForEach(list, (item) =>
{
var deviceId = item.DeviceID;
var device = deviceLogic.GetDevices(deviceId);
if (device == null || model.UserID == device.UserID) return; var address = string.IsNullOrWhiteSpace(item.Address) ? LocationAPI.GetAddressNew(item.OLat, item.OLng) : item.Address; var deviceGroup = userGroupRelationLogic.GetDeviceGroup(deviceId, model.UserID);
var nickname = deviceGroup != null && !string.IsNullOrWhiteSpace(deviceGroup.NickName)
? deviceGroup.NickName
: (personProfileLogic.GetProfileByDevice(deviceId)?.Nickname ?? ""); });

  

优化说明:

  1. 使用Parallel.ForEach并行循环,这样能够同时处理多个元素,提高代码执行效率;
  2. 并行循环还需要保证线程安全,所以在循环体内部不要修改共享资源;
  3. 优化方式与之前相同,对列表中每个元素进行逐一处理,并简化代码逻辑。
  4. 将DevicesLogic、UserGroupRelationLogic和PersonProfileLogic实例化放在循环外部,避免在每次迭代中重复实例化;
  5. 使用var关键字提高代码可读性和简洁性;
  6. 简化addr变量赋值逻辑;
  7. 改善条件语句if(ur != null && _Device != null && model.UserID != _Device.UserID && !ur.NickName.IsNullOrEmpty())的结构;
  8. 简化deviceName变量赋值逻辑。

 

c#代码重构与迭代(一)——循环代码的优化的更多相关文章

  1. IntelliJ IDEA 2017版 编译器使用学习笔记(七) (图文详尽版);IDE快捷键使用;IDE代码重构(编写高质量代码)

    一.重构 重构变量:将语义模糊的变量名称改为更易理解的名称       修改变量名称,快键键 shift + F6 (输入要改的名字,所有位置相同的名字都会改变)               重构方法 ...

  2. python之代码重构

    在撸码过程中,总有很多代码需要重构,码一个问候用户的小例子,加深对代码重构的印象. 原始代码: 1 import json 2 3 filename = 'username.json' #定义文件名 ...

  3. NET代码重构

    记一次.NET代码重构   好久没写代码了,终于好不容易接到了开发任务,一看时间还挺充足的,我就慢慢整吧,若是遇上赶进度,基本上直接是功能优先,完全不考虑设计.你可以认为我完全没有追求,当身后有鞭子使 ...

  4. 代码重构 & 常用设计模式

    代码重构 重构目的 相同的代码最好只出现一次 主次方法 主方法 只包含实现完整逻辑的子方法 思维清楚,便于阅读 次方法 实现具体逻辑功能 测试通过后,后续几乎不用维护 重构的步骤 1  新建一个方法 ...

  5. .NET - 代码重构技巧

    通过面向对象三大特性:封装.继承.多态的学习,可以说我们已经掌握了面向对象的核心.接下来的学习就是如何让我们的代码更优雅.更高效.更易读.更易维护.当然了,这也是从一个普通程序员到一个高级程序员的必由 ...

  6. 代码重构方向原则指导(转载 cnblogs)

    英文原文:Hill Climbing (Wonkish)   重构是一种对软件进行修改的行为,但它并不改变软件的功能特征,而是通过让软件程序更清晰,更简洁和更条理来改进软件的质量.代码重构之于软件,相 ...

  7. Java生鲜电商平台-一次代码重构的实战案例

    Java生鲜电商平台-一次代码重构的实战案例 说明,Java开源生鲜电商平台-一次代码重构的实战案例,根据实际的例子,分析出重构与抽象,使代码更加的健壮与高效. 1.业务说明 系统原先已有登录功能,我 ...

  8. Android Studio在代码重构中的妙用

    代码重构几乎是每个程序员在软件开发中必须要不断去做的事情,以此来不断提高代码的质量.Android Stido(以下简称AS)以其强大的功能,成为当下Android开发工程师最受欢迎的开发工具,也是A ...

  9. 让代码重构渐行渐远系列(3)——string.Equals取代直接比较与非比较

    重构背景及原因 最近由于项目组的人员在不断扩充,导致项目中代码风格各异,大有百花齐放甚至怒放之势.考虑到团队的生存与发展,经过众人多次舌战之后,最终决定项目组根据业务分成几个小分队,以加强团队管理与提 ...

  10. C++代码重构——从C global到C++ template

    在学数据结构的时候,我常有这样目标--写出能够最大程度复用的代码(算法正确,封装优秀).我常想--如何能在短时间内达成"算法正确,封装优秀"这样的目标.经过一段时间的摸索,我的结论 ...

随机推荐

  1. Zabbix6.0使用教程 (二)—zabbix6.0常用术语

    上一次我们已经详细介绍了zabbix6.0的新增功能,本篇我们来说说zabbix6.0常用的一些术语,这个对小伙伴日常使用zabbix的时候还是非常有用,建议大家收藏起来,话不多说,附上干货. 概览 ...

  2. function 的入参 如果是指针的话,如果你用的好的话,会颠覆三观啊 这里就是指对象,数组不用考虑 // 夏娃的苹果

    function 的入参 如果是指针的话,如果你用的好的话,会颠覆三观啊 这里就是指对象,数组不用考虑 这就是一颗 夏娃的苹果

  3. Python 动态网页Fetch/XHR爬虫——以获取NBA球员信息为例

    Python 动态网页Fetch/XHR爬虫--以获取NBA球员信息为例 动态网页抓取信息,一般利用F12开发者工具-网络-Fetch/XHR获取信息,实现难点有: 动态网页的加载方式 获取请求Url ...

  4. 没有 Release 文件的解决方法

    https://blog.csdn.net/weixin_44903509/article/details/108825738 sudo apt-get update 出现问题 E: 仓库 " ...

  5. Shell脚本自动下载FTP文件上传到S3

    1. shell脚本下载 #!/bin/bash #用户名 USER=xxx #密码 PASSWORD=xxx #下载文件临时目录 SRCTDIR=/approveform/uat/tempin #S ...

  6. Android自定义View使用系统自有属性

    原文链接: Android自定义View使用系统自有属性 - Stars-One的杂货小窝 本篇默认各位有自定义View的相关知识,本篇只作为一个小知识点补充 有这样一种情况,比如说我们的一个自定义V ...

  7. 2层for循环生成 TreeView

    C# TreeView 利用2层for循环生成,代码如下: //生成树 treeView1.Nodes.Clear(); //封装了数据库查询方法 MyDS_Grid = MyDataClass.ge ...

  8. 【Leetcode 907 907. 子数组的最小值之和】【单调栈dp】

    import java.util.LinkedList; class Solution { public int sumSubarrayMins(int[] arr) { int n = arr.le ...

  9. drf(序列化器)

    一 序列化器组件介绍(Serializer) 1 序列化器组件介绍 序列化组件,又称序列化器,是处理对象和字典的数据格式转换,json的序列化和反序列化,在Request和Response处理了. ' ...

  10. 使用现代身份验证(OAuth)来连接POP、IMAP或SMTP

    我的博客园:https://www.cnblogs.com/CQman/ 转载: https://mp.weixin.qq.com/s?__biz=MzU0MzUxMzU2NA==&mid=2 ...