我们在服务器上遇到错误,我们的服务在服务器中自动停止。 随机应用程序在大约1小时内崩溃,并且出现以下错误,错误为-
错误的应用程序名称:Chubb.Studio.Event.Processor.exe,版本: 0.0.0.0,时间戳:0x5c0ab1b7故障模块名称:KERNELBASE.dll,版本:6.3.9600.19425,时间戳:0x5d26b6e9异常代码: 0xc0000005故障偏移量:0x0000000000001556故障进程ID: 0x115c故障应用开始时间:0x01d5a35fd202f96d故障 应用路径: E:\ WindowsService \ DevInt \ Chubb.Studio.EventProcessor \ Chubb.Studio.Event.Processor.exe 错误的模块路径:C:\ Windows \ system32 \ KERNELBASE.dll报告ID: 762c15d4-0f5b-11ea-8120-005056a27597故障软件包的全名: 与程序包相关的应用程序ID错误:
我们的代码如下-
protected override void OnStarted()
{
//IntializeEventsExecution();
Task task = Task.Factory.StartNew(() => IntializeEventsExecution());
base.OnStarted();
}
public void IntializeEventsExecution()
{
StartEvents();
}
public void StartEvents()
{
var eventList = GetEventTopics();
Parallel.ForEach(eventList,
new ParallelOptions { MaxDegreeOfParallelism = eventList.Count },
(item, state, index) =>
{
StartProcessingEvent(eventList[(int)index]);
});
}
/// <summary>
///
/// </summary>
/// <param name="index"></param>
public void StartProcessingEvent(EventTopic topic)
{
try
{
Task task = Task.Factory.StartNew(() => ExecuteProcessingEvent(topic));
task.Wait();
}
catch (Exception)
{
}
finally
{
new _processingDelegate(StartProcessingEvent).Invoke(topic);
}
}
答案 0 :(得分:0)
正如克劳斯(Klaus)在他的评论中所说,STATUS_ACCESS-VIOLATION异常是由进程读取或写入它不拥有的内存引起的。鉴于这是C#,最可能的原因是错误使用P/Invoke或使用unsafe code。
调试像这样模糊的东西的最好方法是通过逐个删除P / Invoke调用直到问题没有发生来隔离问题。很难精确地说,因为异常可能是从原因(内存或堆栈损坏)起很长的距离内触发的。
This SO answer很好地列出了托管代码中访问冲突的可能原因。
托管应用中的访问冲突通常发生于其中一种 原因:
- 您P /调用一个本机API,将其传递给被管理对象的句柄,而本机API使用该句柄。如果您得到收藏并且 在本机API运行时进行压缩时,托管对象可能会 移动并且指针变为无效。
- 您使用小于或小于传递的大小的缓冲区P / Invoke某些东西,并且API超出了读取或写入的范围
- 您传递给P / Invoke调用的指针(IntPtr等)无效(-1或0),并且本机在使用前未对其进行检查
- 您P /调用了本地调用,并且本地代码用完了内存(通常是虚拟的),并且不检查分配失败和 读取/写入无效地址
- 您使用未初始化的GCHandle或以某种方式指向已完成并已收集的对象(因此它不是 指向一个对象,它指向一个对象所在的地址 曾经是)
- 您的应用使用句柄来处理因睡眠/唤醒而无效的内容。这比较深奥,但肯定会发生。例如, 如果您使用存储卡运行应用程序,则整个应用程序 没有加载到RAM中。使用中的零件按需求分页 执行。这一切都很好。现在,如果您关闭设备电源, 司机全部关闭。上电后,许多设备仅 重新安装存储设备。当您的应用需要按需进入时 更多的程序,它不再存在,它死了。类似 挂载存储上的数据库可能会发生这种行为。如果您有 在睡眠/唤醒周期后打开数据库的句柄,然后连接 句柄可能不再有效。