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

浙公网安备 33010602011771号