图像识别内存一直上升,并偶尔出现内存不能"read"的问题,求大神帮忙,在线等
本帖最后由 eaglewing1021 于 2012-06-16 16:50:00 编辑 Private Sub cmdSb_Click() '60张已有图片识别测试
' On Error GoTo err1
Dim i As Integer
Dim F_LEN As Long
Dim buff_F() As Byte
Dim str_path As String
js = 60 '调试,识别照片数
txtsend.Text = ""
For i = 1 To js '60张相片识别
str_path = App.Path + "\ZP" + CStr(Num) + "" + "ZD_ZP" & Trim(CStr(i)) & "" + ".bmp"’照片绝对路径
ZP_LJ(i) = str_path
Open str_path For Binary As #2
F_LEN = FileLen(str_path)
ReDim buff_F(0 To F_LEN - 1)
Get #2, , buff_F
Close #2
ReDim pImageBuffe_S(0 To BMP_BUFF_DX - 1)’全局变量
'去除图象头部分
CopyMemory VarPtr(pImageBuffe_S(0)), VarPtr(buff_F(F_LEN - BMP_BUFF_DX)), BMP_BUFF_DX
Erase buff_F
DBMP_SB pImageBuffe_S, i’细胞识别函数,返回分类的细胞数和位置等信息
Erase pImageBuffe_S
'亮度计算
'DPJ_LD_Z = 0 'LightEstimate(VarPtr(pImageBuffe_0(0)), BMP_WIDTH, BMP_HEIGHT)
'更新列表信息 Next
t2 = GetTickCount()
Exit Sub
’程序删除了部分信息显示
err1:
MsgBox Err.Description
End Sub
'将收到的大图RGB识别,累加各类细胞总数,取得各类小图的信息
Public Function DBMP_SB(IN_BMP() As Byte, DBMP_H As Integer) As Integer
'保存已识别出来的各类细胞数
Dim DQBMP_SL As Integer
DBMP_SB = -1
Erase LeucChar1
'中性粒子细胞识别度不够高……
DQBMP_SL = 0
Do While DQBMP_SL = 0
DQBMP_SL = WBCRecgAnaly(VarPtr(IN_BMP(0)), BMP_WIDTH, BMP_HEIGHT, VarPtr(LeucChar1(0)), 124)’图像识别功能函数.
DoEvents
Loop
Dim a As String
Dim b As String
a = "C:\f1.txt"
b = ""
For i = 0 To DQBMP_SL - 1
b = b & LeucChar1(i).NucCount & " " & LeucChar1(i).X & " " & LeucChar1(i).Y & " " & LeucChar1(i).CellClass & Chr(13) + Chr(10)
Next i
Open a For Output As #1
Print #1, b
Close #1
For i = 0 To DQBMP_SL - 1
'信息处理
Next
XB_A_S = XB_A_S + DQBMP_SL
DBMP_SB = 1
Exit Function
CL1:
Err.Clear
MsgBox "DLL调用出现问题!"
End Function
说明:每张图片大小一次2048*1536,大小9MB
程序问题:1连续测试几次,也许会出现错误,内存不能为“read”,不确定性的。
2,在任务管理器中看内存使用率一直在上升。求大神指教!!!!
[解决办法]
内存上升,肯定是有内存没有被释放
[解决办法]
问题应该出在API的调用或API函数内部里,因为VB本身是会自动释放局部内存的,只要不是VB全局变量动态的无休止放大,是不会出现这种问题的。而且即使这样,也不会是内存不能为“read”的问题,这种问题通常出在API处理或调用的过程里,因为这源于 Win32 SDK 开发方式上的一些概念,而 VB 本身是很好的规避掉了这种概念,但如果使用到了API,就进入了Win32 SDK 开发模式,这种情况,如果概念不清楚,就很容易出错。
[解决办法]
调用API造成内存泄漏?