Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Windows服务内存异常_C#_Windows_Memory_Memory Management_Service - Fatal编程技术网

C#Windows服务内存异常

C#Windows服务内存异常,c#,windows,memory,memory-management,service,C#,Windows,Memory,Memory Management,Service,由于使用了两个引用的32位库,Windows服务是一个32位实现;LotusDomino对象和IBM.Data.DB2.iSeries 在Windows服务中,我正在解析日志文件,并将它们的数据保存在内存中的datatables中,以便比较数据。计时器用于发送电子邮件 服务运行了几个月没有出现任何问题 事实上,服务器的~6GB已安装8GB内存一直在使用中,我的服务不再正常运行,引发以下异常: “试图读取或写入受保护的内存。这通常表示其他内存已损坏。”->由发送方法引发 “System.OutOf

由于使用了两个引用的32位库,Windows服务是一个32位实现;LotusDomino对象和IBM.Data.DB2.iSeries


在Windows服务中,我正在解析日志文件,并将它们的数据保存在内存中的datatables中,以便比较数据。计时器用于发送电子邮件

服务运行了几个月没有出现任何问题

事实上,服务器的~6GB已安装8GB内存一直在使用中,我的服务不再正常运行,引发以下异常:

“试图读取或写入受保护的内存。这通常表示其他内存已损坏。”->由发送方法引发

“System.OutOfMemoryException”->由计时器方法引发

当服务正常运行时,只有大约2GB的内存始终处于使用状态

服务是否会尝试分配不可寻址的内存,因为70%以上的内存始终处于使用状态

当内存区域0x00000000-0xFFFFFF仍在使用时,32位应用程序在64位系统上的行为如何?物理上它不能寻址>0xFFFFFF


我使用datatables,如下所示,并将一些数据写入datatables:

private DataTable dt1 = new DataTable();
private DataTable dt2 = new DataTable();
private DataTable dt3 = new DataTable();
private DataTable dt4 = new DataTable();
private DataTable dt5 = new DataTable();
private DataTable dt6 = new DataTable();
dt1 = getDB2Data(); 
dt2 = ParseLogFile(path, time); 
dt3 = CompareDataTables(dt1, dt2);
dt4 = getDB2Data(); 
dt5 = ParseLogFile(path, time); 
dt6 = CompareDataTables(dt4, dt5);


“我正在解析日志文件,并将它们的数据保存在内存中的数据表中,以便比较数据”-您是如何做到的?每个进程都有自己的地址空间,以及自己的虚拟地址范围。没有任何东西可以阻止32位进程将位于4GB边界之上的物理页映射到其地址空间。因此,您关于它“物理上不能寻址>0xffffffff”的断言是不正确的。您是否正在处理任何未使用的表?处理完数据后是否释放了数据?“因此,您关于它“物理上无法寻址>0xffffffff”的断言是不正确的”-是的,您是对的!“是否正在处理任何未使用的表?处理后是否释放任何数据?”-我将再次检查所有代码。
I disposed all datatables after use:

dt1.Dispose();
dt2.Dispose();
dt3.Dispose(); 
dt4.Dispose();
dt5.Dispose();
dt6.Dispose();