代码性能故障排查-我们可以做得更多
2014-07-18 00:00
447 查看
摘要: 一个小问题,做一下记录
今天在项目上遇到一个问题,代码执行的效率太低,最终分析得知,是出在这段代码上
先看一下这段代码
for (int i = 0; i < powerList.Count; i++)
{
Guid powerId = powerList[i].VGUID;//权限ID
DataRow dr = dt.NewRow();
dr[0] = powerList[i].FuncName;
dr[1] = powerList[i].IsParent;
dr[2] = powerList[i].VGUID;
for (int j = 3; j < dt.Columns.Count; j++)
{
Guid roleId = roleList[j - 3].VGUID;
if (_db.CS_Power_Role.Where(c => c.PowerID == powerId && c.RoleID == roleId).Count() != 0)
{
dr[j] = false;
}
else
{
dr[j] = true;
}
}
dt.Rows.Add(dr);
}
结果:执行时间3.28s,大概执行了三百多条SQL语句
优化处理之后:
List<CS_Power_Role> powerRoleList = _db.CS_Power_Role.ToList();
for (int i = 0; i < powerList.Count; i++)
{
Guid powerId = powerList[i].VGUID;//权限ID
DataRow dr = dt.NewRow();
dr[0] = powerList[i].FuncName;
dr[1] = powerList[i].IsParent;
dr[2] = powerList[i].VGUID;
for (int j = 3; j < dt.Columns.Count; j++)
{
Guid roleId = roleList[j - 3].VGUID;
dr[j] = !powerRoleList.Any(c => c.PowerID == powerId && c.RoleID == roleId);
}
dt.Rows.Add(dr);
}
执行时间00:00:00.0090005s,只需要执行一次SQL
原来是在方法里面执行了太多SQL导致运算结果变慢了,其实问题很简单,如果对一个不经常发生变化的数据源进行操作,可以先把它从数据库读入内存,遍历内存可比执行SQL快多了
今天在项目上遇到一个问题,代码执行的效率太低,最终分析得知,是出在这段代码上
先看一下这段代码
for (int i = 0; i < powerList.Count; i++)
{
Guid powerId = powerList[i].VGUID;//权限ID
DataRow dr = dt.NewRow();
dr[0] = powerList[i].FuncName;
dr[1] = powerList[i].IsParent;
dr[2] = powerList[i].VGUID;
for (int j = 3; j < dt.Columns.Count; j++)
{
Guid roleId = roleList[j - 3].VGUID;
if (_db.CS_Power_Role.Where(c => c.PowerID == powerId && c.RoleID == roleId).Count() != 0)
{
dr[j] = false;
}
else
{
dr[j] = true;
}
}
dt.Rows.Add(dr);
}
结果:执行时间3.28s,大概执行了三百多条SQL语句
优化处理之后:
List<CS_Power_Role> powerRoleList = _db.CS_Power_Role.ToList();
for (int i = 0; i < powerList.Count; i++)
{
Guid powerId = powerList[i].VGUID;//权限ID
DataRow dr = dt.NewRow();
dr[0] = powerList[i].FuncName;
dr[1] = powerList[i].IsParent;
dr[2] = powerList[i].VGUID;
for (int j = 3; j < dt.Columns.Count; j++)
{
Guid roleId = roleList[j - 3].VGUID;
dr[j] = !powerRoleList.Any(c => c.PowerID == powerId && c.RoleID == roleId);
}
dt.Rows.Add(dr);
}
执行时间00:00:00.0090005s,只需要执行一次SQL
原来是在方法里面执行了太多SQL导致运算结果变慢了,其实问题很简单,如果对一个不经常发生变化的数据源进行操作,可以先把它从数据库读入内存,遍历内存可比执行SQL快多了
相关文章推荐
- 一些Java性能问题:写Java代码的时候可以参考.
- 图文描述Vs2005制作WEB应用程序安装包的方法[E8.Net正式用户可以找我们获取全部代码参考]
- SQL Server 2008性能故障排查(二)——CPU
- SQL Server 2008性能故障排查(四)——TempDB
- SQL Server 2008性能故障排查(三)——I/O
- 关于索引,我们可以知道的更多 --全表扫描和索引扫描
- 28个常见的“蓝屏”故障代码的排查信息
- SQL Server 2008性能故障排查(一)——概论
- SQL Server 2008性能故障排查(一)——概论
- SQL Server 2008性能故障排查(四)——TempDB
- 图文描述Vs2005制作WEB应用程序安装包的方法[E8.Net正式用户可以找我们获取全部代码参考]
- 持久化模式,第 2 部分: 提高代码重用和改进性能,更多的现代 ORM 工具策略和最佳实践
- 软件开发者面试百问-----怎么样让我们的代码可以处理各种错误事件?
- SQL Server 2008性能故障排查(二)——CPU
- 使用vc2010的c++0x特性,我们可以写出简洁有趣的代码
- 图文描述Vs2005制作WEB应用程序安装包的方法[E8.Net正式用户可以找我们获取全部代码参考]
- 国际:写出漂亮代码的七种方法----看了美化化码的想法,觉得很好,故加以引用,希望更多人可以看到
- 宽带拨号常见错代码解析及故障排查
- SQL Server 2008性能故障排查(三)——I/O
- 今天学习了一下,CS代码按我们的要求加载前台代码需要的JS,感觉很不错【值可以按我们的需要的加载】