zoukankan      html  css  js  c++  java
  • 项目经验:在调用LotusScript Arrayunique 函数时会导致Domino 服务器或Notes 客户端宕机

    这周有个项目出现的问题:就是DOMINO在毫无症状的情况下突然死机,排查了几天总算找到了问题所在。由于这类错误隐藏在LS中,所以很难查到。希望各位Coding时注意。

    环境:(产品,平台,机型,软件版本,等)
    产品:Lotus Notes/Domino
    平台:Windows
    软件版本:6.5-7.2
    问题描述:
    当原数组超出一定数量的元素时,调用Arrayunique 函数会导致Domino服务器或Notes客户端宕机。在一个具体客户的实例中,原数组包含4085个元素,并被定义为Variant类型的变量。在7.02以上版本虽然不会造成DOMINO宕机,但会造成HTTP请求进程无法结束,使服务器CPU始终为100%

    具体代码实例:
    Dim crashvar As Variant
    Dim testsize As Integer
    Dim i As Integer
    testsize=4086
    Redim crashvar(testsize)
    For i = 1 To testsize
     crashvar(i)="a"
    Next
    crashvar = Arrayunique(crashvar)
    在NSD中,导致宕机的线程以下面的条目开头:
    nnotes.LSsThread::ArrayAllocCopy
    nnotes.LSsMathOp::Assignment

     

    解决办法:将数组定义为一个相对独特的类型,而不是Variant类型。
    例如:
    Dim crashvar() As String
    Dim testsize As Integer 
    Dim i As Integer 
    Dim x As Variant
    testsize = 4086
    Redim crashvar(testSize)
    For i = 0 To testsize
    crashvar(i)="a"
    Next
    x = Arrayunique(crashvar)

    建议:在开发中出于性能,内存消耗上考虑,尽量少使用或不要使用数组以及Variant数据类型。(不要使用动态数组,因为在小数据范围内不会造成数据溢出,但在大数据范围内可能会达到数组上限。)

  • 相关阅读:
    关于debug和release 以及new 和delete
    关于new 和delete
    构造函数为什么不能是虚函数
    大端小端【转载】
    “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载)
    memset memcpy函数
    漫谈递归
    scanf 和cin 的区别
    enum枚举类型 的用法
    关于浮点数和字面值常量 的使用—— 学习汇编的重要性
  • 原文地址:https://www.cnblogs.com/hannover/p/2180373.html
Copyright © 2011-2022 走看看