【问题标题】:Maximum number of memory segments that Notes can support has been exceeded已超过 Notes 可以支持的最大内存段数
【发布时间】:2011-08-03 13:51:39
【问题描述】:

我正在使用 Domino.dll 访问 C#.NET 2.0 中的 NSF 文件

我使用多线程一次访问 4 个 NSF 文件,它对小型 NSF 文件工作正常,但如果我尝试访问大型 NSF 文件,我会得到 Out of Memory 异常和 已超过 Notes 可以支持的最大内存段数。

当我在 while 循环中从大型 NSFVIewFolder 访问 NotesDocument 对象时,通常会发生此异常。

我正在使用 Marshal.ReleaseComObject(NotesDocument); 释放 NotesDocument 的实例;它仍然会引发相同的异常。

对于大型 NSF 文件(可能以 GB 为单位),我的目标是一次访问多个 NSF 文件(一次最多 4 个 NSF 文件)。

【问题讨论】:

  • 请不要缩进您的问题。
  • Lotus Notes 的构思和设计者应该非常聪明,甚至有天赋。所以WTF发生了?

标签: c# lotus-domino interop-domino


【解决方案1】:

我不熟悉 C# 接口,但是使用 Java,您需要在进行下一个文档之前显式调用 notes 文档上的 recycle() 方法。不这样做将意味着与notes文档关联的资源将不会被清理。

【讨论】:

    【解决方案2】:

    您的问题类似于this 问题。您使用什么版本的 Domino 来访问数据库?您需要有效地销毁对象。我不认为 ReleaseComObject 正在有效地释放服务器也会用来向 COM 提供数据的内存,因此内存不足。

    我建议您尝试 Java 来执行此操作,因为内存管理比 COM 得到更好的支持。 This 文章和 this 应该有助于为 Domino 编写 Java。 This 简单示例让您了解如何通过文档集合。

    【讨论】:

      猜你喜欢
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多