为什么控制台运行一段时间就报错..

chaikunlai 2010-10-12 08:42:18
我的控制台程序是用来做监控数据库的..
一旦发现符合条件的数据就进行操作...(数据是一直在增加的)
我现在是如果没有可操作数据,用timer控制,每隔5秒执行一次数据库查询..
如果有就设置timer的停止执行,然后方法体内调用方法一直循环操作,中间不间隔...
直到执行至没有可操作的数据.再次打开timer,监控....
可惜不知道为什么,运行exe之后,一段时间是没事的,有时候一个白天都没有问题..
第二天早上,就报错了,程序遇到未知错误需要关闭..
我现在是每个几分钟然程序自己重新加载一次,关闭旧的程序..
这样倒是可以连续开3~4天左右..然后又报同样的错误..
这个问题困扰了我好久啦,怎么会呢?

...全文
152 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
chaikunlai 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 liulangdeyuyu 的回复:]
写一个守护程序,每隔一段时间把这个程序关掉重启一遍
[/Quote]
我现在本身就是每隔1个小时,重新启动,然后强制关闭久的控制台进程..
这样就可以坚持开3~4天左右.
如果不这样,只能1天就报错了..
liulangdeyuyu 2010-10-14
  • 打赏
  • 举报
回复
写一个守护程序,每隔一段时间把这个程序关掉重启一遍
chaikunlai 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 holyplace 的回复:]
首先不看你的代码,像这样的情况你就应该写日志记录,记下在什么地方挂掉了,是什么异常方便查找
[/Quote]
我程序内部都有做异常处理的,而且会把异常全部记录下来,但是我根本就是程序突然就报错误..
您说的连接数据库需要释放么?
因为我是需要连续不断的执行查询数据库的!
所以没有关闭数据库,是不是需要在重启控制台之前先
conn.Close();
conn.Dispose();
我的连接数据库语句是这样的!在一个类里面调用的
private static SqlConnection connection;
public static SqlConnection Connection
{
get
{

// string connectionString = ""
if (connection == null)
{
connection = new SqlConnection(connectionString);
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Closed)
{
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Broken)
{
connection.Close();
connection.Open();
}
return connection;
}
chaikunlai 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ki1381 的回复:]
服务当然可以操作数据库。

另外,建议catch下详细的Excecption,这样比较有方向一点
[/Quote]
我有做异常处理的,但是根本就是在启动的时候报的程序错误,不是程序内部执行的错误.
chen_ya_ping 2010-10-13
  • 打赏
  • 举报
回复
写个windows服务吧,这样更好,网上有例子。
fengyuananan 2010-10-13
  • 打赏
  • 举报
回复
不会,学习,帮lz顶。。。
chaikunlai 2010-10-13
  • 打赏
  • 举报
回复
没人帮下忙么...
HolyPlace 2010-10-13
  • 打赏
  • 举报
回复
数据库连接是否释放?
HolyPlace 2010-10-13
  • 打赏
  • 举报
回复
首先不看你的代码,像这样的情况你就应该写日志记录,记下在什么地方挂掉了,是什么异常方便查找
Ki1381 2010-10-13
  • 打赏
  • 举报
回复
服务当然可以操作数据库。

另外,建议catch下详细的Excecption,这样比较有方向一点
chaikunlai 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chen_ya_ping 的回复:]
写个windows服务吧,这样更好,网上有例子。
[/Quote]
服务可以像C#那样执行数据库之类的操作嘛??
而且还有像远程服务器提交数据接收数据之类的...
chaikunlai 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zsuswy 的回复:]
无代码,无真相。
[/Quote]
我把代码贴出来!!!
static int i = 0;
private static System.Timers.Timer stimer = null;
static void Main(string[] args)
{
SetTimeout();
}

private static void doUpdate()
{
Record record = GetData.getNotdoData();
if (record != null)
{
if (stimer.Enabled)
stimer.Enabled = false;

try
{
//执行的内容
doUpdate();
}
catch (Exception ex)
{
stimer.Enabled = true;
Console.ReadKey();
}
}
else
{
//现在是加了这段才能多跑几天的
if (i >= 6)
{
i = 0;
System.Windows.Forms.Application.Restart();
Environment.Exit(0);

}

if (!stimer.Enabled)
stimer.Enabled = true;
Console.ReadKey();
}
}


public static void SetTimeout()
{
try
{
stimer = new System.Timers.Timer();
stimer.Elapsed += new ElapsedEventHandler(godoUpdate);
stimer.Interval = 5000;
stimer.Enabled = true;
}
catch
{
Console.WriteLine("计时器异常...");
}
}

public static void godoUpdate(object sender, System.Timers.ElapsedEventArgs e)
{
doUpdate();
}
zsuswy 2010-10-12
  • 打赏
  • 举报
回复
无代码,无真相。
lexfu 2010-10-12
  • 打赏
  • 举报
回复
有什么占用的资源没有释放导致资源耗尽了?
chaikunlai 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chazikai24 的回复:]
5秒的间隔,肯定会出问题。
数据库操作是需要时间的,尤其是数据很多的时候,查询数据库耗时就会增加。
如果整个程序执行一次循环所需要的时间超过5秒,很可能出现你说的问题。
[/Quote]
可能你没有明白我的意思,我是在只没有任何可操作的数据的时候才定时5秒检查一次..
一旦发现数据,就停止timer定时执行,自己循环了..
执行完后如果发现没有数据可操作了,定时才再次启动..
chazikai24 2010-10-12
  • 打赏
  • 举报
回复
5秒的间隔,肯定会出问题。
数据库操作是需要时间的,尤其是数据很多的时候,查询数据库耗时就会增加。
如果整个程序执行一次循环所需要的时间超过5秒,很可能出现你说的问题。

111,129

社区成员

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

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

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