→ shibin: 如果是new char[] 要搭配使用delete[]而不是delete喔01/08 15:39
→ shibin: 如果是new char[] 要搭配使用delete[]而不是delete喔01/08 15:39
是delete[]沒錯
是delete[]沒錯
※ 編輯: su27 (220.136.106.27 臺灣), 01/08/2021 16:22:31
※ 編輯: su27 (220.136.106.27 臺灣), 01/08/2021 16:22:31
推 TeaEEE: 你是return一個string還是c#傳pointer去get string?01/08 16:49
推 TeaEEE: 你是return一個string還是c#傳pointer去get string?01/08 16:49
在c#是寫成ref string temp
C++則是 char* &temp
※ 編輯: su27 (220.136.106.27 臺灣), 01/08/2021 17:18:01
→ Lipraxde: 有開 thread 嗎?01/08 17:44
有
※ 編輯: su27 (220.136.106.27 臺灣), 01/08/2021 18:12:36
→ Lipraxde: 看是不是有在不同 thread 釋放 memory 的情形,我以前01/08 19:05
→ Lipraxde: 在 linux 上遇到過,不知道 windows 上會不會也發生同01/08 19:05
→ Lipraxde: 樣的事01/08 19:05
請問一下
都沒錯誤的狀況下
不管執行多少遍 記憶體都不會一直增加 是嗎?
※ 編輯: su27 (220.136.106.27 臺灣), 01/08/2021 19:13:48
推 Schottky: 都沒錯誤(X) 錯誤藏在你沒看見、想不到的地方(O)01/08 19:25
推 Schottky: 都沒錯誤(X) 錯誤藏在你沒看見、想不到的地方(O)01/08 19:25
推 ko27tye: 你在dll內allocate的記憶體 也要由dll來釋放01/08 19:34
→ ko27tye: 把你dll內delete的行為包成一個function給上層呼叫01/08 19:35
→ ko27tye: 把你dll內delete的行為包成一個function給上層呼叫01/08 19:35
我目前的確是
由dll創建的
也做一個函數由c#呼叫去delete
C#要輸入值
就用marshal.AllocHGlobal
dll用完後
marshal.FreeHGlobal去刪除
※ 編輯: su27 (220.136.106.27 臺灣), 01/08/2021 19:53:56
→ WPC001: 一定是沒適當的釋放... 就這樣,你沒把code貼出來01/08 23:47
→ WPC001: 根本沒人知道你是怎麼寫的,甚至有可能問題出在C#而不是C++01/08 23:48
→ kobe8112: 使用VS的追蹤工具檢視相關資源、將DLL功能拆分成多個部01/09 00:01
→ kobe8112: 份分別測試、在邏輯不變的前提DLL運算數量簡化到最小...01/09 00:03
→ kobe8112: 我自己的話會從這幾個方向著手,當然最快作法就是貼code01/09 00:03
我本來是執行一大堆程式(使用很多dll的函數)
把他拆成
把他拆成
1.只載入圖片20000次 內存是28M 看起來沒問題
2.將圖片轉成灰度圖。 20000次後 變成51M
這函數沒任何數字及字串 輸入輸出
程式碼挺大的 現在也不曉得到底哪裡有問題
就如我說的 執行兩三次內存是相同的 沒任何變化
我估計我得在C#寫個小程式 才能知道哪裡出問題
謝謝
※ 編輯: su27 (220.136.106.27 臺灣), 01/09/2021 03:16:55
→ petercoin: 看看轉灰度圖的部分有沒有沒釋放掉的記憶體阿01/09 03:19
→ petercoin: 如果那個功能是用WINAPI做的,有些釋放記憶體是要另外01/09 03:19
→ petercoin: 呼叫相對應的function,沒有呼叫就會一直吃掉記憶體01/09 03:20
→ sarafciel: 我猜問題應該是出在C# 你有物件是從manage轉unmanage嗎01/10 00:12
Struct算嗎
我的數據交換是用struct
※ 編輯: su27 (42.74.224.220 臺灣), 01/10/2021 16:21:06
→ sarafciel: 用C#做的struct或class都是managed,簡單的說,他們都 01/10 21:06
→ sarafciel: 會被GC控管,在處理這種C#跟VC++的介接時,會碰到的一 01/10 21:08
→ sarafciel: 個問題是C++處理到一半時C#的GC被叫起來 然後把你丟到 01/10 21:09
→ sarafciel: C++的struct釋放掉,所以有一個函式是指定某個物件要求 01/10 21:12
→ sarafciel: GC不要去處理他 你可能要找一下code有沒有這種東西 01/10 21:13
→ kobe8112: 幫樓上補關鍵字: GCHandle 01/11 09:11
→ sunneo: 看圖片載入是從哪做的 通常都會有dispose() 可以用 01/16 23:38