我必须并行化一个应用程序;这个应用程序必须处理一个文件,我使用了任务,每个线程都在处理一行数据(以前它用于逐行处理)。问题是数据提供者使用某种缓存,并且在此过程中多次访问文件,因此使用一个数据提供者很难使其成为线程安全的,相反我每次都在新的数据提供者上创建一个线程正在处理一行。它在前几次运行中运行良好,但一段时间后用于访问文件的 COM 对象开始抛出以下错误:
发生 COMException:错误代码 = -2147287036
当我检查“2147287036”是“没有足够的资源打开另一个文件”的错误代码时。我确定我正在为数据提供者/COM 对象调用关闭/处置,所以我很难理解为什么我无法访问该文件(我有一个异常处理逻辑,试图在写入中打开文件模式,如果不成功,它会尝试以读取模式打开它,如果不成功,它会再次抛出异常,基本上就是上面提到的那个)。
我的第一个线索是 COM 对象不会立即释放文件句柄。但这仍然没有多大意义。