|
本帖最后由 易小妞 于 2019-12-3 19:23 编辑
图片_转换1 未发现释放内存操作导致内存占用越来越大,直到崩溃
由于需要压缩图片的质量,达到节省空间,使用了图片_转换1
使用时,运行一会就出现崩溃
仔细查阅论坛,也发现很多人反映 图片_转换 存在内存泄漏或没有释放 导致崩溃的问题
官方在6.41版本的精益中 已经新增了 图片_转换_EX 来解决内存泄漏的问题
我查看图片_转换_EX源代码,发现申请内存这一操作
而查看了 图片_转换_1->使用的是类_图像格式转换类中的 转换到字节集 的源代码 发现无此操作
|
转换到字节集 | 字节集 | | |
转换格式 | 整数型 | | | | JPG图片质量 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | Clsid | 字节集 | | | DataStream | 对象 | | | hMemDataStream | 整数型 | | | pDataStream | 整数型 | | | nStreamSize | 整数型 | | | bRet | 逻辑型 | | | eps | EncoderParameters | | | quality | 整数型 | | | 新图像 | 字节集 | | | pStream2 | 整数型 | | | pStream1 | 整数型 | | | 如果真 (m_pBitmap = 0 )返回 (新图像 )填充背景 () 如果真 (是否为空 (JPG图片质量 )) JPG图片质量 = 100 如果真 (JPG图片质量 < 0 )JPG图片质量 = 0 如果真 (JPG图片质量 > 100 )JPG图片质量 = 100 GetCLSID (转换格式, Clsid )eps.Count = 1 eps.Parameter [1 ].Type = 4 eps.Parameter [1 ].NumberOfValues = 1 如果真 (转换格式 = 2 ) quality = JPG图片质量 eps.Parameter [1 ].Value = lstrcpynA_整数传址 (quality, quality, 0 )CLSIDFromString_字节 (A2W (“{1d5be4b5-fa4a-452d-9cdd-5db35105e7eb}”, ), eps.Parameter [1 ].Guid )
hMemDataStream = GlobalAlloc ( #GMEM_MOVEABLE, 0 )CreateStreamOnHGlobal_Object (hMemDataStream, 假, DataStream )pStream1 = GetObjectPtr (DataStream, DataStream, 0 ) 如果真 (pStream1 ≠ 0 )RtlMoveMemory_整数传址1 (pStream2, pStream1, 4 )如果真 (pStream2 ≠ 0 )GdipSaveImageToStream (m_pBitmap, pStream2, Clsid, eps )pDataStream = GlobalLock (hMemDataStream )nStreamSize = GlobalSize (hMemDataStream )如果真 (pDataStream ≠ 0 )新图像 = 取空白字节集 (nStreamSize )RtlMoveMemory_int2Bytes (新图像, pDataStream, nStreamSize )bRet = 真 GlobalUnlock (hMemDataStream)GlobalFree (hMemDataStream)返回 (新图像 )
结果无论是 转换到文件还是转换到字节集均无发现无申请内存这一操作
请版主查阅和修复这一问题,此问题从6.4版本持续到现在的7.75版本
|
|