2009-12-01 111 views
3

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

对于大型的NSF文件,我得到了像内存段溢出一样的Notes错误。 为了解决这个问题,我使用了Marshal.ReleaseComObject(object)来释放必要的Notesdocument和NotesView对象。

现在,问题是,我能够访问2 NSF文件,但其余线程进入DLL例外,因为很少的Notes对象变为空。

请提供一些帮助....

感谢您的帮助。

回答

2

最近我对这个问题做了一些实验。

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

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