在 Microsoft Dynamics CRM Outlook 客户端中加载了许多 PST 文件,导致内存不足和网络断开连接。

本文提供了解决在 Microsoft Dynamics CRM Outlook 客户端中加载许多 PST 文件导致的内存不足和网络断开连接问题的方法。

适用于: Microsoft Dynamics CRM
原始 KB 数: 2015877

现象

此问题可能表现在多个症状或下面列出的任何症状中。

  1. 与 Microsoft Dynamics CRM 服务器频繁断开连接。 Microsoft Dynamics CRM 客户端系统任务栏图标将显示“与 Microsoft Dynamics CRM 服务器通信时出现问题。 服务器可能不可用。 请稍后重试。 如果问题仍然存在,请与系统管理员联系。

  2. Microsoft Office Communicator(如果已安装)与 Microsoft Exchange Server 频繁断线。 这通常表现为 Microsoft Office Communicator 处于断开连接状态,并会显示“正在尝试连接”等消息。

  3. Microsoft Outlook 与 Microsoft Exchange 服务器的断开连接。 这可能会在 Microsoft Outlook 右下角显示为“文件夹上次更新于 x 日期和时间”,其中 x 日期和时间指的不是当前的日期和时间,而可能是比当前日期和时间早一到两个小时的时间。

  4. Microsoft Outlook 进程可能打开了超过 10,000 个句柄(可以使用 Windows 任务管理器或 Microsoft Sysinternals 工具 Process Explorer 查看)。

  5. 如果已启用 Microsoft CRM Dynamics 客户端平台跟踪(例如 生成支持 跟踪文件),则可能会在 Microsoft Dynamics CRM 平台跟踪文件中看到其他错误。 通常,下面记下的错误将在名为 MachineName-OUTLOOK-Client-YYYYMMDD-#.log 的文件中看到,其中 YYYY = 年份、MM = 月份,DD = 日志文件的创建日期。 请注意,其中一些消息也会记录在出现问题的客户端计算机的应用程序事件日志中。

    1. Microsoft CRM Outlook 外接程序无法初始化用户的语言设置。 重启Microsoft Outlook,然后重试。 HR=0x8007000e。 上下文=。 Function=CEnableState::Activate。 Line=169。

    2. 在从 Microsoft CRM 服务器检索数据以处理与 Microsoft CRM 相关的电子邮件时发生错误。 并非所有与 CRM 相关的电子邮件都可能会相应地进行标记。 验证当前用户是否具有适当的权限和服务器连接性,然后重试该操作。 HR=0x80131534。 上下文=。 Function=CEmailTagger::Run。 Line=414。

    3. Outlook 互操作期间发生异常:System.Net.WebException:请求失败,HTTP 状态为 401:未授权。

    4. outlook 互操作期间发生异常:Microsoft.Crm.CrmException:找不到资源(301)。

    5. Outlook 互操作期间发生异常:System.Net.WebException:无法连接到远程服务器---> System.Net.Sockets.SocketException:主机计算机 192.168.1.1:443 中的软件中止了已建立的连接

    6. Outlook 互操作期间发生异常:System.Net.WebException:无法连接到远程服务器---> System.Net.Sockets.SocketException:尝试对无法访问的主机 192.168.1.1:443 执行套接字操作

    7. 在尝试检查用户是否经过身份验证时出现异常:无法连接到远程服务器,System.Net.WebException---> System.Net.Sockets.SocketException:套接字操作尝试访问无法访问的主机 192.168.1.1:443

    8. LoadMetadataForRichClient() 出现异常:System.OutOfMemoryException:引发“System.OutOfMemoryException”类型的异常。

注意

捕获内存转储的以下步骤是可选的,因为应该使用事件日志错误或 Microsoft Dynamics CRM 客户端平台的跟踪错误日志来捕获这些症状。

如果使用以下步骤捕获了 Microsoft Outlook 进程的内存转存,

添加注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
键值:GCBreakOnOOM
类型:DWORD
值:2

将上述键设置为在遇到 System.OutOfMemoryException 时会导致进程内发生 DebugBreak。 配置调试诊断工具:

  1. 将 DebugDiag 下载并安装到至少具有 4-5 GB 磁盘空间的驱动器。
  2. 打开 DebugDiag。 如果系统提示选择规则,请选择“ 崩溃”。 否则请选择“ 添加规则 ”按钮,然后选择“ 崩溃”。
  3. 选择 “下一步 ”,然后选择 特定进程
  4. 选择进程名称,例如本例中的 Outlook.exe。 选择 “下一步”。
  5. “高级设置”下,选择“ 例外”,然后选择“ 添加异常”。
  6. 从异常列表中选择80000003断点异常。
  7. 将动作类型设置为完整用户转储,并将动作限制设置为 1。 选择“确定”
  8. 选择“保存和关闭”按钮。
  9. 选择 “下一步 ”并为必须保存转储文件的规则和位置提供名称。
  10. 选择“ 下一步 ”,然后选择“ 完成 ”按钮。

使用 Windbg 和 SOS !threads 命令分析内存转储时,您可能会看到托管线程中列出的 System.OutOfMemoryException。 还可能会看到列出的 System.Net.WebException 错误。

原因

出现此问题的原因是 Outlook 2003 和 Outlook 2007 为缓存 .pst 文件分配的内存多于早期版本的 Microsoft Outlook。 启用此注册表项后,Outlook 2003 或 Outlook 2007 将分配与早期版本的 Outlook 相同的内存量来缓存 .pst 文件。 这通常仅在 outlook Microsoft 中加载大量打开的 PST 文件(例如,加载了 50 个或更多 PST 文件)时才会看到。

解决方法

此处列出了主要解决方法:

警告

如果您使用注册表编辑器或其他方法错误地修改了注册表,可能会出现严重问题。 这些问题可能需要重新安装操作系统。 Microsoft 不能保证可以解决这些问题。 您应自行承担修改注册表的风险。

如果使用 Microsoft Outlook 2003:

  1. 退出 Outlook 2003。
  2. 选择“开始”,选择“运行”,在“打开”框中键入 regedit,然后选择“确定”。
  3. 找到并选择以下注册表子项:HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\PST
  4. 在“编辑”菜单中,指向“新建”,然后选择“DWORD 值”。
  5. 键入 UseLegacyCacheSize,然后按 Enter。
  6. 右键单击 UseLegacyCacheSize,然后选择“ 修改”。
  7. 在“值”数据框中,键入“1”,然后选择“确定”。
  8. 在“ 文件 ”菜单上,选择“ 退出 退出注册表编辑器”。

如果使用 Microsoft Outlook 2007:

  1. 退出 Outlook 2007。
  2. 选择“开始”,选择“运行”,在“打开”框中键入 regedit,然后选择“确定”。
  3. 找到并选择以下注册表子项:HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Outlook\PST
  4. 在“编辑”菜单中,指向“新建”,然后选择“DWORD 值”。
  5. 键入 UseLegacyCacheSize,然后按 Enter。
  6. 右键单击 UseLegacyCacheSize,然后选择“ 修改”。
  7. 在“值”数据框中,键入“1”,然后选择“确定”。
  8. 在“ 文件 ”菜单上,选择“ 退出 退出注册表编辑器”。

如果使用 Microsoft Outlook 2010:

  1. 退出 Outlook 2010。
  2. 选择“开始”,选择“运行”,在“打开”框中键入 regedit,然后选择“确定”。
  3. 找到并选择以下注册表子项:HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Outlook\PST
  4. 在“编辑”菜单中,指向“新建”,然后选择“DWORD 值”。
  5. 键入 UseLegacyCacheSize,然后按 Enter。
  6. 右键单击 UseLegacyCacheSize,然后选择“ 修改”。
  7. 在“值”数据框中,键入“1”,然后选择“确定”。
  8. 在“ 文件 ”菜单上,选择“ 退出 退出注册表编辑器”。

应应用并可能需要辅助分辨率,以补充主分辨率。

  1. 网络断开或无法连接到 Microsoft CRM 服务器,可能是因为没有足够的可用 WinInet 连接。 这可以通过使用 FixIt 功能或手动实现相应的注册表更改来自动修复。

  2. 我们还可以通过在客户端计算机上设置以下两个注册表项来提高与网络相关的性能,并最大程度地减少网络问题。 如果尚未设置这些密钥,则需要将其创建为 DWORD 类型的键。 创建这些键并设置正确的值:

    HKEY_LOCAL_MACHINE\System\CurrectControlSet\services\Tcpip\Parameters\MaxUserPort
    值:65000 十进制

    HKEY_LOCAL_MACHINE\System\CurrectControlSet\services\Tcpip\Parameters\TCPTimedWaitDelay
    值:30 个小数

详细信息

  • 为支持生成平台跟踪文件
  • Windbg 下载 适用于 64 位或 32 位 Windows(通常是 32 位 Windbg 用于Microsoft Microsoft Outlook 客户端调试,因为 Outlook 2003 和 Microsoft Outlook 2007 中只有 32 位版本的 Microsoft Outlook 可用)。