項目經驗:在調用LotusScript Arrayunique 函數時會導致Domino 伺服器或Notes 用戶端宕機

來源:互聯網
上載者:User

這周有個項目出現的問題:就是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資料類型。(不要使用動態數組,因為在小資料範圍內不會造成資料溢出,但在大資料範圍內可能會達到數組上限。)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.