[问题] C#调用vc++打包的dll,内存会一直上升

楼主: 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 上会不会也发生同样的事
作者: Schottky (顺风相送)   2021-01-08 19:25:00
都没错误(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++
作者: kobe8112 (小B)   2021-01-09 00:01:00
使用VS的追踪工具检视相关资源、将DLL功能拆分成多个部份分别测试、在逻辑不变的前提DLL运算数量简化到最小...我自己的话会从这几个方向着手,当然最快作法就是贴code
作者: petercoin (彼得币)   2021-01-09 03:19:00
看看转灰度图的部分有没有没释放掉的内存阿如果那个功能是用WINAPI做的,有些释放内存是要另外呼叫相对应的function,没有呼叫就会一直吃掉内存
作者: sarafciel (Cattuz)   2021-01-10 00:12:00
我猜问题应该是出在C# 你有物件是从manage转unmanage吗
作者: kobe8112 (小B)   2021-01-11 09:11:00
帮楼上补关键字: GCHandle
作者: sunneo (艾斯寇德)   2021-01-16 23:38:00
看图片加载是从哪做的 通常都会有dispose() 可以用

Links booklink

Contact Us: admin [ a t ] ucptt.com