You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET游戏项目图片资源添加遇内存问题,求替代Resources的方案

解决VB.NET资源文件大量图片导致的编译/内存问题

替代Resources的更优资源管理方案

Resources适合存放少量配置、小图标,并不适配图像密集型游戏的大量图片存储需求,推荐以下方案:

  • 独立文件存储
    在项目中创建专门的资源文件夹(如Assets/Images),将图片放入其中,设置文件的生成操作为Content,复制到输出目录为如果较新则复制。加载时直接通过文件路径读取:

    ' 获取输出目录下的图片路径
    Dim imagePath As String = Path.Combine(Application.StartupPath, "Assets\Images\player.png")
    Dim playerBitmap As New Bitmap(imagePath)
    

    优势:不嵌入程序集,编译速度更快,内存占用更低,还能随时替换图片无需重新编译。

  • 拆分.resx资源文件
    不要将所有图片塞进默认的Resources.resx,按功能创建多个子资源文件(如UIResources.resx、SpriteResources.resx),分类存放不同类型的图片。加载时仅初始化当前场景需要的资源类,避免一次性加载所有资源到内存。

  • 纹理图集打包
    使用纹理打包工具将多张小图片合并为单张大图,加载时仅读取这一张图集,通过坐标截取对应区域显示:

    ' 加载图集
    Dim spriteAtlas As New Bitmap("Assets\Atlas\game_sprites.png")
    ' 截取图集上(0,0)位置、大小64x64的小图
    Dim enemySprite As New Bitmap(64, 64)
    Using g As Graphics = Graphics.FromImage(enemySprite)
        g.DrawImage(spriteAtlas, New Rectangle(0, 0, 64, 64), New Rectangle(0, 0, 64, 64), GraphicsUnit.Pixel)
    End Using
    

    大幅减少文件数量和内存开销,是游戏开发的常规优化手段。

若坚持使用Resources的优化手段

  • 清理冗余资源:打开Resources设计器,删除未使用的图片,减少资源文件体积。
  • 压缩图片格式:将BMP等无压缩格式转换为PNG(支持透明)或JPG(无透明场景),降低内存占用。
  • 延迟加载+及时释放:不要在启动时加载所有资源,仅在需要时调用My.Resources.XXX,使用完毕后调用Dispose()释放内存:
    Dim tempImg As Image = My.Resources.Background
    ' 使用图片逻辑
    tempImg.Dispose() ' 释放资源
    
  • 清理项目缓存:删除项目的bin和obj文件夹,重新生成解决方案,避免缓存导致的异常;同时在项目属性的“生成”选项中,取消“首选32位”(64位系统下),让程序能利用更多系统内存。

内容的提问来源于stack exchange,提问作者Kip Polley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:57:32