|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我有个同学,他是搞Java的,他给我说“Java不是效率低,而是速度慢。”,我不是搞Java的,我实在想不透这句话的含义,难道执行速度不就是效率低吗?难道执行速度慢还成效率高了?在ASP.NET中的Session存储体例不象asp那样单一,一共供应了三种存储体例,因为比来一个2000多人利用的web软件呈现了妨碍,用户天天早上在某一时候呈现难以上岸征象,接着Session丢值呈现,只要重启IIS,或呆板.这时候程序恢复一般了.成天都不会呈现一样的成绩,可是第二天仍旧!这类征象延续了好几天,我反省了一下日记文件,岑岭每秒会见人数也许20人摆布,同时也许100多人在线,今后会见人数还会增添,为懂得决这个怪成绩,先从软件动手,故而三种体例都使用了一番。翻开web.config文件
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="datasource=127.0.0.1;
Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
个中默许的mode是InProc范例,这类形式和之前ASP形式一样,就是服务器将Session信息存储在IIS历程傍边,当IIS封闭、重起后这些历程信息城市丧失,但这类形式的功能最高(详细没测,看书上说),这类形式是asp.NET的默许体例。
因为这类形式呈现了妨碍,事先我的思索就是因为会见量过年夜的缘故原由,招致Inetinfo.exe历程溃散。用户难以上岸乃至Session丢值呈现妨碍,我接纳了别的一种Session的存储体例把Session信息存储在历程外。
起首,翻开办理工具找到服务,找到名为:ASP.NETStateService的服务,启动它.而且改成主动启动。这时候你能够在义务办理器中看到一个名为aspnet_state.exe的历程。这就是我们保留session信息的历程。
然后,回到web.config文件中把Mode的值改成StateServer,保留文件。OK.
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="datasource=192.10.78.76;
Userid=sa;password=sa"
cookieless="false"
timeout="20"
/>
这类形式当我们重起IIS,保留的session值不会丧失。别的这类体例还能够把信息保留在其他呆板的历程中,不外还要变动stateConnectionString="tcpip=127.0.0.1:42424",IP地点改成其他呆板便可。
别的还接纳了其他的措施.好比把数据库和Web服务器分隔,数据库服务器不供应WEB服务,Web服务器不供应数据库服务,
然后把毗连池扩展,因为ASP.NET中ADO.NET数据会见默许毗连池数目为100,厥后我扩展到6000特地把写法加下去
“Server=(local);
Database=rgs;
password=sa;
userID=sa;
MaxPoolSize=6000;
MinPoolSize=5;
Pooling=True”
最初把Machine.config中的ProcessModel中的memoryLimit改成95,默许为60,暗示内存占用凌驾60%后iis历程会主动重起。接着还做写别的一些优化IIS的办法,把注册表的IIS缓存加年夜等等。
当我做完这些优化步骤后,全部软件运转对照优秀,第二天没有发明梗塞的征象,可是第三天情形又呈现了,其实没举措,我接纳了最初一种ASP.NET中的session存储办法就是将Session存储在SQLServer中,我想如许不乱性应当强些。
要利用SQLServer中,起首在会话形态的SQLServer的盘算机上,运转InstallSqlState.sql或InstallPersistSqlState.sql(默许地位:systemrootMicrosoft.NETFrameworkversionNumber上面)两个剧本都创立一个名为ASPState的数据库,两个剧本的不同在于安排ASPStateTempApplication和ASPStageTempSessions表的地位。InstallSqlState.sql剧本将这些表增加到TempDB数据库,该数据库在盘算机重起时将丧失数据,而InstallPersistSqlState.sql剧本将这些表增加到ASPState数据库,该数据库重启时保存会话数据。
然后在使用程序的web.config文件中,把<sessionState>元素的mode属性设置为SQLServer,最初将sqlConnectionString属性设置为IntegratedSecurity=SSPI;datasource=serverName;
<sessionStatemode="SQLServer"
sqlConnectionString="IntegratedSecurity=SSPI;
datasource=dataserver;
"cookieless="false"timeout="20"
/>
</sessionState>
假如部署在其他呆板上能够变动为,加上用户名和暗码
<sessionState
mode="SQLServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="datasource=192.10.78.76;
Userid=sa;password=sa"
cookieless="false"
timeout="20"/>
如许部署完成了,假如不想利用这类能够删撤除,只需在响应的目次(systemrootMicrosoft.NETFrameworkversionNumber)找到UninstallPersistSqlState.sql大概UninstallSqlState.sql文件运转便可。如许就先容了ASP.NET中的session存储形式。
最初要注重的是,不管利用StateServer大概SQLServer形式时,当利用session转换工具时,注重工具要先序列化,就是在类前加上Serializable,不然会呈现毛病!
以前学了大概半年时间的asp(没有机会做大系统,最多是自己对公司系统做些调整和修改还有一些小程序)。应该说开始接触asp.net是今年元月5号的事。现在很想把公司的系统重新用.net来架构,却不知道如何下手。 |
|