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数据类型。(不要使用动态数组,因为在小数据范围内不会造成数据溢出,但在大数据范围内可能会达到数组上限。)

  • 相关阅读:
    【HDOJ】2267 How Many People Can Survive
    【HDOJ】2268 How To Use The Car
    【HDOJ】2266 How Many Equations Can You Find
    【POJ】2278 DNA Sequence
    【ZOJ】3430 Detect the Virus
    【HDOJ】2896 病毒侵袭
    求奇数的乘积
    平方和与立方和
    求数列的和
    水仙花数
  • 原文地址:https://www.cnblogs.com/hannover/p/2062019.html
Copyright © 2011-2022 走看看