作者:
su27 (su27)
2021-01-08 14:34:24開發平台(Platform): (Ex: Win10, Linux, ...)
win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
vs2017
我在vc++寫好的opencv
在vc++執行幾萬次 記憶體都不會增加
封裝成dll檔給c#使用
每執行一次不會有變化,
但連續執行(至少十幾次後)
會看到約0.1M的增加
執行20000次後 記憶體從30M變成80M
我有使用new char[]的都有delete
我有使用new char[]的都有delete
我有使用new char[]的都有delete
我有使用new char[]的都有delete
我有使用new char[]的都有delete
我有使用new char[]的都有delete
我有使用new char[]的都有delete
我有使用new char[]的都有delete
在c#跟c++數字交換是用struct
都是由c#這邊生成struct
在丟給vc++去讀取或寫入數據
字串交換都是c#宣告string 在丟給vc++
Vc++有new char[]
也會事後在vc++ delete
日前我找不到什麼原因記憶體會不斷上升
作者: shibin (喜餅) 2021-01-08 15:39:00
如果是new char[] 要搭配使用delete[]而不是delete喔
作者: TeaEEE (愛不趴 不愛趴) 2021-01-08 16:49:00
你是return一個string還是c#傳pointer去get string?你是return一個string還是c#傳pointer去get string?
作者:
Lipraxde (Lipraxde)
2021-01-08 17:44:00有開 thread 嗎?看是不是有在不同 thread 釋放 memory 的情形,我以前在 linux 上遇到過,不知道 windows 上會不會也發生同樣的事
都沒錯誤(X) 錯誤藏在你沒看見、想不到的地方(O)
作者:
ko27tye (好滋好滋)
2021-01-08 19:34:00你在dll內allocate的記憶體 也要由dll來釋放把你dll內delete的行為包成一個function給上層呼叫把你dll內delete的行為包成一個function給上層呼叫
作者: WPC001 (好悶, 迷惘~~) 2021-01-08 23:47:00
一定是沒適當的釋放... 就這樣,你沒把code貼出來根本沒人知道你是怎麼寫的,甚至有可能問題出在C#而不是C++
使用VS的追蹤工具檢視相關資源、將DLL功能拆分成多個部份分別測試、在邏輯不變的前提DLL運算數量簡化到最小...我自己的話會從這幾個方向著手,當然最快作法就是貼code
看看轉灰度圖的部分有沒有沒釋放掉的記憶體阿如果那個功能是用WINAPI做的,有些釋放記憶體是要另外呼叫相對應的function,沒有呼叫就會一直吃掉記憶體
我猜問題應該是出在C# 你有物件是從manage轉unmanage嗎
作者:
sunneo (艾斯寇德)
2021-01-16 23:38:00看圖片載入是從哪做的 通常都會有dispose() 可以用