3

我在 c# 应用程序中使用 Interop.Domino dll 版本 1.2,并通过为创建的每个线程创建新会话(一次最多 5 个线程)使用多线程同时访问多个 NSF 文件。

对于大型 NSF 文件,我收到了诸如内存段溢出之类的 Notes 错误。为了克服这个问题,我使用 Marshal.ReleaseComObject(object) 来释放必要的 Notesdocument,并尽可能地释放 NotesView 对象。

现在,问题是,我可以访问 2 个 NSF 文件,但其余线程正在进入 dll 异常,因为很少有 Notes 对象变为空。

请给我一些帮助....

感谢帮助。

4

1 回答 1

2

我最近一直在对同样的问题进行一些实验。

我编写了一个启动两种不同类型线程的测试程序。每个线程配置为与 8 到 10 个用户一起工作。每个线程都必须读取 Domino 目录才能为用户定位邮件文件,并且每个线程还将结果文档写入单个通用 NSF 文件。但是对于邮件文件中的主要工作,没有两个线程访问同一个 NSF。NSF 文件分布在两台服务器上。其中五个线程正在使用 NotesDatabase.Search,其中五个线程正在读取 NotesView 并向下钻取到 NotesViewEntry 对象。我遇到了与您遇到的相同的内存问题,并以相同的方式解决了它——但我非常小心,没有释放 Domino 目录或输出 NSF 的数据库对象。我已经用最多 10 个活动线程运行了这个测试代码,没有任何问题。

这是令人鼓舞的,但是我认为这不足以证明 Domino COM 对象是完全线程安全的。

于 2011-12-13T21:39:09.963 回答