Faulting application name: adidas_GROW.exe, version: 1.0.0.0, time stamp: 0x5371cd4a
Faulting module name: nlssorting.dll, version: 4.0.30319.17929, time stamp: 0x4ffa5787
Exception code: 0xc00000fd
Fault offset: 0x000000000000440f
Faulting process id: 0xcd4
Faulting application start time: 0x01cf6edb16f1130b
Faulting application path: D:\adidas_Service\GROW_Service\adidas_GROW.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\nlssorting.dll
下面简单说下服务的内容,
服务一启动的时候将NEW一个主线程,该线程的作用是用来判断一些特定的条件,刚条件满足后将会在线程里面再NEW一个子线程出来,每个子线程会去执行特定的任务,每个任务的时间大概在10分钟左右。
等主线程里面的内容全部执行完毕后 休眠一分钟,然后再次执行本身。代码如下
protected override void OnStart(string[] args)
{
try
{
new Thread(() => { GrowServiceManager(); }).Start();
}
catch (*Exception ex)
{
Log.WriteLog(" OnStart " + ex.Message);
}
catch (Exception ex)
{
Log.WriteLog("失败");
Log.WriteLog(ex.Message);
}
)
void GrowServiceManager()
{
try
{
//前至内容我就省略不写了
if (满足条件1)
{
new Thread(() => { new TargetService(xml).TaskProcessor("",isPriority,"",""); }).Start();
}
else if (满足条件2)
{
new Thread(() => { new POSBWService(xml).TaskProcessor("", isPriority, "", ""); }).Start();
}
else if (满足条件3)
{
new Thread(() => { new BrasilService(xml).TaskProcessor("", isPriority, "", ""); }).Start();
}
else if (i满足条件4)
{
new Thread(() => { new WeService(xml).TaskProcessor("", isPriority, "", ""); }).Start();
}
}
catch (*Exception ex)
{
Log.WriteLog(" GrowServiceManager " + ex.Message);
}
catch (Exception ex)
{
Log.WriteLog(ex.Message);
}
Thread.Sleep(60000);
GrowServiceManager();
}
请大神指点指点,该错误如何解决,万分感谢。
11 个解决方案
#1
简单方法就是改多线程为多进程。
线程出事连累主程序, 子进程出事则不关主程序的事。
线程出事连累主程序, 子进程出事则不关主程序的事。
#2
只是开几个线程不会消耗那么大内存的吧,你还是得看你那几个BrasilService里代码怎么写的
#3
四个子线程的方法大至多是一样,
从FTP下载文件到本地,然后将文件导入到数据库,计算报表,再将FTP上的文件删除。
#4
可这样的话进程也太多了点,我上面列出的子线程只是一部分。
#5
你线程里干了那么多事,你要确保所有对象都得被释放
#6
只是开几个线程不会消耗那么大内存的吧,你还是得看你那几个BrasilService里代码怎么写的
四个子线程的方法大至多是一样,
从FTP下载文件到本地,然后将文件导入到数据库,计算报表,再将FTP上的文件删除。
你线程里干了那么多事,你要确保所有对象都得被释放
NET不是会自动去释放不用的对象么?
#7
对gc是自动回收的,但你总得告诉gc哪些能回收了吧,比如操作excel,file类,你不去把他关了,系统就一直认为他不是一个该回收的对象就放置不管了,所以该关的还得关
#8
对gc是自动回收的,但你总得告诉gc哪些能回收了吧,比如操作excel,file类,你不去把他关了,系统就一直认为他不是一个该回收的对象就放置不管了,所以该关的还得关
不知道此方法能不能释放掉内存
Thread.CurrentThread.Abort();
#9
你操纵ftp类有没关闭,还有数据库连接有没关闭,是不是反复在打开数据库链接,这些都得查
#10
你操纵ftp类有没关闭,还有数据库连接有没关闭,是不是反复在打开数据库链接,这些都得查
操纵ftp类 每用完一次就会关闭,但数据库连接没有,因为每过一分钟就得连一次数据查数据。
#11
数据库不关闭没关系,别开一个新的就行
你操纵ftp类有没关闭,还有数据库连接有没关闭,是不是反复在打开数据库链接,这些都得查
操纵ftp类 每用完一次就会关闭,但数据库连接没有,因为每过一分钟就得连一次数据查数据。
#1
简单方法就是改多线程为多进程。
线程出事连累主程序, 子进程出事则不关主程序的事。
线程出事连累主程序, 子进程出事则不关主程序的事。
#2
只是开几个线程不会消耗那么大内存的吧,你还是得看你那几个BrasilService里代码怎么写的
#3
只是开几个线程不会消耗那么大内存的吧,你还是得看你那几个BrasilService里代码怎么写的
四个子线程的方法大至多是一样,
从FTP下载文件到本地,然后将文件导入到数据库,计算报表,再将FTP上的文件删除。
#4
简单方法就是改多线程为多进程。
线程出事连累主程序, 子进程出事则不关主程序的事。
可这样的话进程也太多了点,我上面列出的子线程只是一部分。
#5
只是开几个线程不会消耗那么大内存的吧,你还是得看你那几个BrasilService里代码怎么写的
四个子线程的方法大至多是一样,
从FTP下载文件到本地,然后将文件导入到数据库,计算报表,再将FTP上的文件删除。
你线程里干了那么多事,你要确保所有对象都得被释放
#6
只是开几个线程不会消耗那么大内存的吧,你还是得看你那几个BrasilService里代码怎么写的
四个子线程的方法大至多是一样,
从FTP下载文件到本地,然后将文件导入到数据库,计算报表,再将FTP上的文件删除。
你线程里干了那么多事,你要确保所有对象都得被释放
NET不是会自动去释放不用的对象么?
#7
对gc是自动回收的,但你总得告诉gc哪些能回收了吧,比如操作excel,file类,你不去把他关了,系统就一直认为他不是一个该回收的对象就放置不管了,所以该关的还得关
#8
对gc是自动回收的,但你总得告诉gc哪些能回收了吧,比如操作excel,file类,你不去把他关了,系统就一直认为他不是一个该回收的对象就放置不管了,所以该关的还得关
不知道此方法能不能释放掉内存
Thread.CurrentThread.Abort();
#9
你操纵ftp类有没关闭,还有数据库连接有没关闭,是不是反复在打开数据库链接,这些都得查
#10
你操纵ftp类有没关闭,还有数据库连接有没关闭,是不是反复在打开数据库链接,这些都得查
操纵ftp类 每用完一次就会关闭,但数据库连接没有,因为每过一分钟就得连一次数据查数据。
#11
数据库不关闭没关系,别开一个新的就行
你操纵ftp类有没关闭,还有数据库连接有没关闭,是不是反复在打开数据库链接,这些都得查
操纵ftp类 每用完一次就会关闭,但数据库连接没有,因为每过一分钟就得连一次数据查数据。