程式放久了就當掉了

小弟最近再測試自己的程式到底能放多久而不會當掉

結果從禮拜五開始執行到禮拜一今天

發現變成了"看似沒當但卻當"的詭異情形

因為測試的產品是將自家公司的晶片模組放在其他產品上,所以這可能也是造成當機的原因之一

 

1.比較想知道的是,記憶體使用量會不會造成程式放久當掉呢?看了一下大概在16500K左右,應該不算太大導致程式當掉才是@@?

2.因為有使用到"shift register",所以再猜想是不是因為我沒有停止過,所以shift register便一直持續的累積堆疊,然後才造成當機?但有接個輸出視窗出來看,假設我的資料量是10,他每次更新是10全部更新,所以說我的資料永遠就只有10個,這樣應該不至於讓程式當掉才對吧@@?

3.然後有弄兩三個計時的視窗,只是他們是隱藏起來的,單位是秒,所以以跑兩天來計算的話就是跑了172800秒(以上),而視窗類型是用DBL類型,不知道這會不會也是原因之一@@?因為超出了計算範圍?

不太懂,所以如果問了笨問題還請見諒Orz

感恩!

tjames11141253.6343171296

<span name=“paypal” =“gd”>可以從幾個地方下去著手:

1. 是否有硬體I/O操作,有的話是否有只開啟沒有關閉的情形?
2. 是否有使用外部DLL呼叫,有的話是否有呼叫開啟關閉的限制?
3. 是否有使用未配置初始化條件的SHIFT REGRISTER?
4. 是否使用大量的AUTO INDEXING功能?

我有碰到相關的問題都事先從上面這些開始調查。

[QUOTE=caeru]可以從幾個地方下去著手:

1. 是否有硬體I/O操作,有的話是否有只開啟沒有關閉的情形?

恩...抱歉大大,這點其實看了不是很懂@@a 所謂的硬體I/O操作是指? 小弟的程式與公司產品的搭配主要是產品會丟訊號出來,而我程式接收到訊號後經過比對後可能是說閃爍的狀態或是恆亮的狀態或是顯數數值這樣,不知道這是大大指的I/O操作嗎@@?


2. 是否有使用外部DLL呼叫,有的話是否有呼叫開啟關閉的限制?

小弟沒使用外部DLL


3. 是否有使用未配置初始化條件的SHIFT REGRISTER?

有的,但有試過讓他初始化發現整個程式都會被影響Orz 而不初始化我的功能才正常@@  所以說我程式會當掉可能就是因為這點囉?


4. 是否使用大量的AUTO INDEXING功能?

這功能是@@?可能有看過且使用,但只看文字對他沒什麼印象@@


我有碰到相關的問題都事先從上面這些開始調查。

感恩~!
[/QUOTE]

硬體I/O例如VISA Configure Serial Port開了沒有關之類的。

SHIFT REGRISTER
未初始化是否在長時間執行下來會導致記憶體配置異常,
這部分我沒有實際測試過,但是應用面上我是習慣初始化他,尤其是特定用途的SUB VI,避免預期外的異常發生。

至於使用大量的AUTO INDEXING功能可提升程式速度,減少資料在內部記憶體中COPY的機會(與BUILD ARRAY相比)
(剛才發現把正面表述放在負面表述的下方又沒說明,好像挺容易讓人誤會的…||)

[QUOTE=caeru]硬體I/O例如VISA Configure Serial Port開了沒有關之類的。

有使用到VISA,不過有設定一個"停止程式"的按鈕,按下後全部的迴圈都會停止,然後最後再執行Port關閉的動作

不過經大大這樣一講,有辦法從電腦的哪邊去看說是否以正確關閉Port了嗎@@?


SHIFT REGRISTER未初始化是否在長時間執行下來會導致記憶體配置異常,
這部分我沒有實際測試過,但是應用面上我是習慣初始化他,尤其是特定用途的SUB VI,避免預期外的異常發生。

恩恩,這點我知道,書上也有說盡量能初始化就初始化,我再看看能不能在都初始化的狀況下正常動做了Orz


至於使用大量的AUTO INDEXING功能可提升程式速度,減少資料在內部記憶體中COPY的機會(與BUILD ARRAY相比)
(剛才發現把正面表述放在負面表述的下方又沒說明,好像挺容易讓人誤會的...||)

能請問AUTO INDEXING是在哪邊嗎@@?他是一個元件還是一種功能@@?因為小弟我找原件是找不到這個@@a

感恩~!
[/QUOTE]

VISA Configure Serial Port這個元件用了之後,後續的VISA WRITE就可以作動,
以前反覆的去使用VISA Configure Serial Port,結果導致在長時操作下程式異常,
詢問NI工程師後才知道這樣是錯誤的行為。
正確的流程是設定好後就只需要使用W/R功能,
如需重新設定,則建議先使用CLOSE之後再去Configure。

AUTO INDEXING是一個節點,會自動將迴圈內部的資料建立成矩陣:

從這個節點出去的資料不會額外進行COPY的動作,所以速度較快。

那關於我問題的第三點,秒數的顯示視窗有沒有影響呢??

不知道DBL類型的輸出最大值是多少@@?有超過172800嗎?因為跑了兩天我也不知道他是什麼時候掛掉的@@

[QUOTE=tjames111]

那關於我問題的第三點,秒數的顯示視窗有沒有影響呢??

不知道DBL類型的輸出最大值是多少@@?有超過172800嗎?因為跑了兩天我也不知道他是什麼時候掛掉的@@

[/QUOTE]

你要找的因該是陣列

也許你的時間會組成陣列

跑了兩天 也許你的陣列已經很大造成當機

[QUOTE=bahamut][QUOTE=tjames111]

那關於我問題的第三點,秒數的顯示視窗有沒有影響呢??

不知道DBL類型的輸出最大值是多少@@?有超過172800嗎?因為跑了兩天我也不知道他是什麼時候掛掉的@@

[/QUOTE]

你要找的因該是陣列

也許你的時間會組成陣列

跑了兩天 也許你的陣列已經很大造成當機

[/QUOTE]

陣列?是指矩陣嗎@@?

是的話,應該是沒有,因為我沒有做任何的變動只有接出來顯示而已@@

[QUOTE=tjames111]

陣列?是指矩陣嗎@@?

是的話,應該是沒有,因為我沒有做任何的變動只有接出來顯示而已@@

[/QUOTE]

AUTO INDEXING下圖紅色框框的地方就會形成array了,你可能要找一下有沒有形成array的部分:

試了幾天還是找不出來原因

而SHIFT REGRISTER也都有初始化了

而bahamut與Benjamin兩位大大說的矩陣問題,這點小弟不太清楚@@

因為我每個矩陣都有配置了清除,除非我所知道的清除並非清除@@a

我所用的"清除"是將矩陣造一個Local Variable,然後在將Empty string輸入進去(字串視窗的話是這樣)

從視窗上來看,就是將原本有資料的視窗變成了空白

不知道這樣是否就是所謂的清除資料呢?

感恩~!

我知道的是有個Request Deallocation 可以用

但不知道效果好不好
你可以試看看

[QUOTE=tjames111]

試了幾天還是找不出來原因

而SHIFT REGRISTER也都有初始化了

而bahamut與Benjamin兩位大大說的矩陣問題,這點小弟不太清楚@@

因為我每個矩陣都有配置了清除,除非我所知道的清除並非清除@@a

我所用的"清除"是將矩陣造一個Local Variable,然後在將Empty string輸入進去(字串視窗的話是這樣)

從視窗上來看,就是將原本有資料的視窗變成了空白

不知道這樣是否就是所謂的清除資料呢?

感恩~!

[/QUOTE]

無字天書不等於沒有書

你要輸入的是空字串陣列,而不是空白字串陣列。

也就是讓他的Array size變成0

[QUOTE=bahamut

[/QUOTE]

無字天書不等於沒有書

你要輸入的是空字串陣列,而不是空白字串陣列。

也就是讓他的Array size變成0

[/QUOTE]

所謂的輸入空字串是只圖一這樣嗎??

還是圖二的??

圖一

![](upload://beXMGdPRlX6zgsVuCpNCtuap1ud.jpeg)

圖二

![](upload://qfANEoMiW8NMMzDieoPcKgyUb5z.jpeg)

還是....都不是@A@?!!

感恩><!

 

 

都不是

 

最左邊就是空陣列

bahamut41269.7879398148

[QUOTE=bahamut]

 

都不是

 

![](upload://sn3T6reV733e99ZSID0laRUPASK.png)

最左邊就是空陣列

[/QUOTE]

原來如此,陣列了解!

但假如是要清除非陣列的呢??

就像我圖PO的那樣,只要要把輸出欄清除,是用圖二那樣嗎??

感嗯!

非陣列一般來說不會評估記憶體佔用的問題,因為資料量很小,
除非你有某個不斷變大的非陣列文字變數,如單一的log file使用一個text variance,
這種才需要去清空他,直接輸入空字串即可。
陣列的部分就必須如<span =“bold”>bahamut所說的,必須用空矩陣清除。