高分请教。net访问不稳定

PoolGolden 2008-09-24 10:05:33
在一个。net开发的系统上,最近因为以下两件事导致访问不稳定,特别是访问量大的时候。
若还需要什么资料,请指示我再贴上。放假前结贴。

第一、
在服务器上的事件查看器里,看到这种红色错误:
一般发生的当天会密集发生十次左右。
Failed to execute request because the App-Domain could not be created. Error: 0x8007000e 存储空间不足,无法完成此操作。
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
请教如何跟踪到是哪里出了问题?或者有解决办法最好 。

第二、

超时问题,寻找网络,大部分说连接问题。
Exception information:
Exception type: InvalidOperationException
Exception message: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

于是我把我的网站的所有数据操作方式写出:
请高手指教有何漏洞:
1.

try
{
myConnection.Open();
object result = myCommand.ExecuteScalar();
myConnection.Close();
if (result != null)
return (string)result;
else
return "";
}
catch
{
myConnection.Close();
return "";
}

2。
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();

3.
myConnection.Open();
SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);

return result;

4.

try
{
myConnection.Open();
SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);

if (result.HasRows)
return true;
else
return false;
}
catch
{
return false;
}
...全文
297 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
PoolGolden 2008-10-09
  • 打赏
  • 举报
回复
晕,长假刚回来,放假前忘了结贴,马上散分~
c2u 2008-09-26
  • 打赏
  • 举报
回复
写一个定时清日志的作业.....

zero8500 2008-09-26
  • 打赏
  • 举报
回复
空间和数据库是否够大。。。
WillWang 2008-09-26
  • 打赏
  • 举报
回复
实际上,这两个问题是同一个问题引起的。一般而言,除非超大批量的并发,才会引发缓冲池满。


对于每一个Connection连接 ,使用
using(connection c = new connection())
{
……
}



connection c = null;
try
{
c = new connection ();
……
}
catch
{
}
finnaly
{
if(c!=null)
c.disposed();
}

就会保证连接用完就释放。缓冲池,也是一种资源。

[Quote=引用 10 楼 PoolGolden 的回复:]
引用 9 楼 wwlyqin 的回复:
第二个问题出现原因并不是连接引起的,也是由于资源耗尽,即缓冲池已满,不能处理新传进来的请求引发超时。


能否告知有何办法尽量避免缓冲池满这种情况。莫非要我每次一出问题,就上服务器回收一下?
[/Quote]
abcyzq 2008-09-26
  • 打赏
  • 举报
回复
恩,连接缓冲池。
appSettings>
<add key="SQLDAL" value="XXX.SqlserverDAL"/>
<add key="SqlConn" value="server=(local);uid=;pwd=;database=;min pool size=4;max pool size=24;packet size=3072"/>
</appSettings>
使用的时候
using(connection c = new connection())
{
……
}

PoolGolden 2008-09-26
  • 打赏
  • 举报
回复
13楼似乎有理~,准备验证。
另外还有个回答用Q发过来的,也帖上共勉:说:
这个问题是由于ASP.NET进程无可用内存造成的。
在应用程序池中设置下该网站的最大运行内存,当达到最大内存后自动回收内存即可解决。
WillWang 2008-09-24
  • 打赏
  • 举报
回复
内存耗尽了
.Net的垃圾收集机制采用的是延后收集,即使某个对象不再使用,它并没有被实时清除,而是在某个时间之后释放。
对于占用资源(比如内存,句柄等)较多的对象,程序员必须使其立即释放,不能等待GC清除,否则会引发资源不足等错误。

对于占用资源较多的对象,最好使用using,这样可以保证使用完后立即释放。
这是第一个问题出现的原因。

第二个问题出现原因并不是连接引起的,也是由于资源耗尽,即缓冲池已满,不能处理新传进来的请求引发超时。

以后需要注意编码规则,虽然.Net提供了垃圾收集机制,但是不能全部依靠GC。

PoolGolden 2008-09-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 whycom 的回复:]
日志已经告诉你了,存储空间不足
[/Quote]

呵呵,我也看到存储空间不足这几个字
问题是,在什么情况下会出现的存储空间不足,
能否跟踪得到??
是不是因为本人编码不好引起的。还是因为iis或者framework配置出问题。
killer_liqiao 2008-09-24
  • 打赏
  • 举报
回复
同上
卧_槽 2008-09-24
  • 打赏
  • 举报
回复
看看你数据库所在盘的磁盘空间是不是够
看看c盘是不是满了。
mapserver 2008-09-24
  • 打赏
  • 举报
回复
代码没有问题。
查看你们sql server的空间,检查你们的网络,看看网内是否有机器中毒。
JeffChung 2008-09-24
  • 打赏
  • 举报
回复
顶.貌似跟你贴出来的代码没有关系,代码没有问题
whycom 2008-09-24
  • 打赏
  • 举报
回复
日志已经告诉你了,存储空间不足

nattystyle 2008-09-24
  • 打赏
  • 举报
回复
兄弟帮顶
wuyi8808 2008-09-24
  • 打赏
  • 举报
回复
up
winlinking 2008-09-24
  • 打赏
  • 举报
回复
两个问题有可能是同个原因导致,你可以把数据连接封装成连接池:
string Connection = cnstring + ";Pooling = true" ;
ArrayList myConnectionArray = new ArrayList(MumberOfConnections);

for(int i = 0;i< MumberOfConnections;i++)
{
SqlConnection cn = new SqlConnection(Connection);
cn.Open();
myConnectionArray.Add(cn);

}
pcitlju 2008-09-24
  • 打赏
  • 举报
回复
学习,帮顶一下。
PoolGolden 2008-09-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wwlyqin 的回复:]
第二个问题出现原因并不是连接引起的,也是由于资源耗尽,即缓冲池已满,不能处理新传进来的请求引发超时。
[/Quote]

能否告知有何办法尽量避免缓冲池满这种情况。莫非要我每次一出问题,就上服务器回收一下?

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧