• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

C#批量显示图片内存不足的问题

雪千渔 2019-01-25 11:57:01
一个图片浏览器,左面就是文件夹的目录树,选择目录树后右面显示文件夹的图片,有的文件夹多的有600多张,图片库总80G,但是是按文件夹分开来的,使用的ListView和ImageList,但是读几张之后就提示内存不足了,怎么办。



private void FileTree_AfterSelect(object sender, TreeViewEventArgs e)
{
string path = e.Node.Tag as string;
if (path != null)
{
listView1.Clear();
string[] files = Directory.GetFiles(path);

for (int i = 0; i < files.Length; i++)
{
imageList1.Images.Add(Image.FromFile(files[i]));
var tmp = listView1.Items.Add(files[i]);
tmp.ImageIndex = i;
}
}
}
...全文
1182 点赞 收藏 15
写回复
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dispose
回复
SoulRed 2019-02-12
在 Thumbs.db 读取缩略图减小占用的内存
每次只显示20张,就是滚轮滚到的地方
因为你一次屏幕我看只显示几十张。
所以其他的几百张完全不需要加载
回复
良朋 2019-02-12
for (int i = 0; i < files.Length; i++)
{
imageList1.Images.Add(Image.FromFile(files[i]));
var tmp = listView1.Items.Add(files[i]);
tmp.ImageIndex = i;
}
这个太狠了,没这样尝试过,不知道楼主问题解决了吗? 这样加速度如果,静待后续帖子。
回复
qq_36276155 2019-02-01
引用 7 楼 qq_36276155的回复:
求助......不知道20分怎么发问题,只好这样做了...
关于c语言基础里的txt文档读写的实现 #include <stdio.h> int aaa; int a=1111; int b=2; int c=3; float d=5.1; int e; int write(); int read(); int write() { printf("\nwrite begin\n"); FILE *fpWrite=fopen("data.txt","w"); if(fpWrite==NULL) { printf("\nwrite fail\n"); return 0; } fprintf(fpWrite,"%d ",a); fprintf(fpWrite,"%d ",b); fprintf(fpWrite,"%.1f ",d); printf("\nwrite successed\n"); fclose(fpWrite); } int read() { printf("\nstart reading\n"); FILE *fpRead=fopen("data.txt","r"); if(fpRead==NULL) { printf("\n读取失败\n"); return 0; } { printf("...\n"); fscanf(fpRead,"%d ",&a); printf("000"); fscanf(fpRead,"%d ",&b); printf("111"); fscanf(fpRead,"%.1f ",&d); printf("222\n"); printf("%d%d%.1f\n",a,b,d); printf("%d %d %.1f",a,b,d); } getchar();//等待 return 1; } int main() { printf("\n开始\n"); scanf("%d",&aaa); printf("\n000\n"); if(aaa==2) read(); if(aaa==1) write(); printf("结束"); } 里面定义的变量d的值是5.1 进行写入操作之后,txt里面最后一个值(d的值)为5.1 直接读取,d=5.1 修改txt中的5.1,改为其他值,读取时,d的值还是5.1 怎么让d读到txt里面实际的值?
回复
qq_36276155 2019-02-01
求助......不知道20分怎么发问题,只好这样做了...
回复
蒋晟 2019-02-01
(Image.FromFile的图片没有Dispose 显示文件夹还是序列表+自绘吧,只有当前可见的列表项里的图片才需要加载,文件夹再大,同时显示的列表项也不会有很多。
回复
exception92 2019-02-01
按需显示,设定显示的数量,切换之后释放资源。
回复
ilikeff8 2019-02-01
你 imageList1.Images 只添加重来不删的吗
回复
cheng2005 2019-02-01
你难道把原图都加载到内存里进行展示?假如一张图片5M,1000张就大约是5个G,你把原图都加载内存里展示有什么用?
1,用缩略图
2,按需加载
回复
橘子皮zzz 2019-01-31
NET编程经常遇到内存不足问题,读写文件也是经常遇到这个,不知道什么原因,都是坑,哎
回复
大然然 2019-01-29
改成分页显示
回复
摸瞎 2019-01-29
可能是图片内存资源没释放
回复
a410787073 2019-01-28
这情况大部分是 没Dispose()的问题。。
回复
xuzuning 2019-01-26
可尝试从 Thumbs.db 读取缩略图
回复
吹风的兔子 2019-01-26
你要先确定:真的是内存不足,还是 读取图片错误。 > 真正的内存不足,一般 是你的程序 运行时,进程的内存占用 超过几个G 可能会出现。 > 有些图片本身存在问题,在读取时 进程明明只有几M,也依然报错:内存不足。 建议: 读取图片的函数 加个 try - catch catch 的时候返回一个 默认图片 (图片显示 “读取图片失败”)
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2019-01-25 11:57
社区公告

让您成为最强悍的C#开发者