夜鹰教程网-程序员的加油站
 当前位置:文章中心 >> vs2022_vs2019_vs2017_vs2014_vs2012
易被忽视的.NET开发过程中的问题之三
夜鹰教程网 来源:www.yyjcw.com 日期:2016-11-30 14:21:34
2.3 绝不建议在循环语句写如下的语句, 具体为什么,自己思考。
2.3 绝不建议在循环语句写如下的语句, 具体为什么,自己思考。
  Foreach (DataRow row in tabl.select(“”,”ProductID”)
……………
Dim DS new Dataset 记住此乃写代码之大忌;
Dim DT new Databable….
………….
Next
还有一种写法
Dim DS new Dataset
Dim DT new Databable…
Foreach (DataRow row in tabl.select(“”,”ProductID”)
DS=GetDatase
DT=GetDatatable……………
.
………….
Next

正确的写法是:
Dim DS new Dataset
Dim DT new Databable…
Try
Foreach (DataRow row in tabl.select(“”,”ProductID”)
DS=nothing ‘每次使用,都先把内存空间释放出来
DT=nothing ‘每次使用,都先把内存空间释放出来
DS=GetDatase
DT=GetDatatable……………
.
………….
Next
Catch ex As Exception
Throw ex
Finally
DS.dispose
DT.dispose
End Try

  另外,提醒大家一点,记得用 For Each 语句替代For i=0 to Rowcount-1,这样的效率改善也是明显的。

    三、调试(Debug)模式下编译就用于应用环境中篇
     有人会留意这个界面吗?有,但一定不多。
   
    接着,程式开发好(也包括单元测试),然后编译直接分发到应用环境。

    整个过程就结束了。谁也不曾想,这里埋下了一个深深的地雷,据微软的人讲,这样分发的程式到应用环境,你有多少内存恐怕都不够。
   
    所以微软建议我们做如下的工作:

“請將Web.config中的debug及Trace均設為False。還有您的所有程式請確保compile為Release Mode
Application set up for debugging
One reason for high memory that we see here in Support a lot is when you have debugging, tracing, or both enabled for your application.
While you are developing your application, this is a necessity.By default, when you create your application in Visual Studio .NET, you will see the following attribute set in your Web.config file:
<compilation … debug="true" />
and/or
<trace enabled="true" … />
Also, when you do a final build of your application, make sure that you do this in "Release" mode, not "Debug" mode. ”

  如果不这样做会有什么事情发生? 我分享一个同事的感受给大家:

“已经是很强悍的的DB和AP服务器(全部是刀片式服务器)了,可是问题一而再再而三地发生,那种感觉真的很无助很凄凉啊~”

    后来的结果发现是内存使用率超高,到一定限度的时候,就会反应变慢,这个时候只要重启IIS就可以好一段时间。后来分析IIS用到实体加虚拟的内存超过2G就会爆掉。
   
    这就是原因,你想遇到吗?那就不妨试试。

四、实际操作分享篇

    上面三个环节,任何一个发生问题,都会影响到系统的效率。我分享我们实际的作业的过程发生的一些情况,及怎么解决这些问题。

    4.1 内存使用达到峰值,导致程序无法继续运行。
   
    有个同事分享了他们的经验如下(原话分享):
 

    我们有一些程式是server跑的Job,并有越来越多之势。而大家在写程式的时候可能比较少考虑到耗内存这个问题。
下面的例子也许会给我们一点启示。

    下面也是原话
  Pls help to check the Run In Rack Job program . It will no response after running two or three days . the AP server Memory usage will over 2.5G . after we close the the program , Memory will decrease to 1.5 .

    大致意思是:在服务器端(也叫后台)自动跑的一只程式,运行了两三天后,停止运行了。检查Server的内存使用率时,发现超过了2.5G;在关掉了这只程式后,它就降到了1.5G…

    4.2 进程请求过多,导致CPU无法及时处理,程序效率反应较慢。

    下面都是同事的原话:

    “年后产量逐渐增加,新的问题又出现了。从Server Performance上分析,和上次Memory过高不同的是CPU使用率过高。
    每当CPU过高的时候,产线会大面积的反应说慢(这点和连接到哪台AP有关系)。
    每次慢的时候,我们就找到CPU过高的那台AP,recycle IIS的application pool后就OK了。
    于是我么再次找到Bon帮忙分析(结论:微软结案报告 20090226V1 - SRT090119833891 Web service can't serve IISReset can fix.msg)。并给出了开发程序时的一些建议。
    结论大致是说,没有进程占用了特别高的CPU,也没有进程占用CPU时间过长。只是对DB的请求的进程过多(比较吻合3厂的实际状况—附件多,刷的快),加起来就整体过高。
    还发现了很多DLL是built in debug mode,这些DLL占用了过多的memory资源。
    后来根据Bon的建议,我们修改了IIS application pool的设定如下,解决过多请求不能及时处理,而造成CPU过高的问题。”

    这里有一些问答关于应用连接池(Application Pool)的设定,对理解这样的设置有一定的帮助:

    1. Is one application pool’s maximum memory usage 1.5G?
A&: Each application pool is a w3wp.exe. w3wp.exe is a process. Every process has 2 G User mode virtual address, so the maximum memory usage for application pool is 2G. However, you can’t make sure that there is no memory fragment issue. Therefore, Out of memory always occur after 1.5 G according to our experience.

    2. Is each application pool independent on memory usage?
A&: Different application pools are different w3wp.exe, so each application pool’s maximum memory usage is 2G.

    3. Can setup maximum CPU usage on each application pool?
A&: You can monitor it, but you can’t setup it.

    写完这篇文章的时候,我们另一项目组的开发者,也遇到了同样的问题,他们开发好的一只程式,用户反映很慢。我跑过去一看代码,完了,所有我描述的问题,他们都无一避免地出现啦,那就赶紧告诉他们,还等什么?

复制链接 网友评论 收藏本文 关闭此页
上一条: 配置web.config代码asp.net3.5个性…  下一条: 易被忽视的.NET开发过程中的问题之二
夜鹰教程网成立于2008年,目前已经运营了将近 13 年,发布了大量关于 html5/css3/C#/asp.net/java/python/nodejs/mongodb/sql server/android/javascript/mysql/mvc/easyui/vue/echarts原创教程。 我们一直都在坚持的是:认证负责、一丝不苟、以工匠的精神来打磨每一套教程,让读者感受到作者的用心。我们默默投入的时间,确保每一套教程都是一件作品,而不是呆板的文字和视频! 目前我们推出在线辅导班试运营,模式为一对一辅导,教学工具为QQ。我们的辅导学科包括 java 、android原生开发、webapp开发、商城开发、C#和asp.net开发,winform和物联网开发、web前端开发,但不仅限于此。 普通班针对的是国内学员,例如想打好基础的大学生、想转行的有志青年、想深入学习的程序员、想开发软件的初学者或者业余爱好者等。 就业办针对即将毕业上岗的大四学生,或者打算转行的初级开发工程师。 留学生班针对的是在欧美、加拿大、澳洲、日本、韩国、新加坡等地留学的中国学子,目的是让大家熟练地掌握编程技能,按时完成老师布置的作业,并能顺利地通过考试。 详细咨询QQ:1416759661   夜鹰教程网  基于角色的权限管理系统(c-s/b-s)。
  夜鹰教程网  基于nodejs的聊天室开发视频教程
  夜鹰教程网  Git分布式版本管理视频教程
  夜鹰教程网  MVC+EasyUI视频教程
  夜鹰教程网  在线考试系统视频教程
  夜鹰教程网  MongoDB视频教程。
  夜鹰教程网 Canvas视频教程
  夜鹰教程网 报表开发视频教程
  热点推荐
一个关于天气预报的WebService【C…
VS2010最大的新特点是并行编程的进…
TextBox控件:asp.net中如何为密码…
Web服务调用实例:实现天气预报的…
ASP.NET程序员面试试题(130道题)
ASP.NET教程:调用WebService的源码…
网站开发全程设计
据说这套.net面试题很多网络公司都…
考考你:C#常见题型及部分答案
原创:.net读取数据库sql2000
伪静态URL重写配置
配置web.config代码asp.net3.5个性…
使用线程池提高性能 Socket网络编…
ASP.NET(C#)GridView表头的增加…
如何找到正确的学习方向【.NET版】…
  最近更新
C#修改注册表demo
一个获取内容中的图片地址的方法
ASP.NET 4.0尚未在 Web 服务器上注…
四大作用域:application,session…
ConfigurationManager不存在的解决…
vs2012_vs2013_vs2015没有Web Dep…
vs2015禁用解决方案中单击打开文件…
微软为Visual Studio 2015新增安卓…
C#如何实现搜索引擎网络爬虫程序
C#中正则表达式的用法
用C#抓取需要登录的页面数据
VS2015新功能
VS2015安装图解教程
vs2015新功能介绍
vs2015安装图解

关于我们 | 网站建设 | 技术辅导 | 常见问题 | 联系我们 | 友情链接

夜鹰教程网 版权所有 www.yyjcw.com All rights reserved 备案号:蜀ICP备08011740号3