你的位置:
问答吧
-> .NET
-> 问题详情
c# WINFORM 照片转BASE64编码问题
项目需要,先想一张图片转换为BASE64编码,再将BASE64转换为UTF8,三张照片同时转换,每张约300K 左右。
同时转换后,系统超慢,全部转换完成需要大约5分钟时间。
求教,能否加快转换速度?怎样得到转换完成的标志?
曾经试过多线程,不是很理想,或许我的多线程写得不怎么好。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Web;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string A = Get_zjdz("D:/1.JPG");
string B = Get_zjdz("D:/2.JPG");
string C = Get_zjdz("D:/3.JPG");
textBox1.Text = A + B + C;
}
public string Get_zjdz(string fileadd)
{
FileStream fs = new FileStream(fileadd, FileMode.Open);
int filelength = 0;
filelength = (int)fs.Length; //获得文件长度
Byte[] fl = new Byte[filelength];
fs.Read(fl, 0, filelength);
fs.Close();
string bbc1 = Convert.ToBase64String(fl);
string bbc2 = HttpUtility.UrlEncode(bbc1, Encoding.UTF8);
return bbc2;
}
}
}
作者: lb8133
发布时间: 2010-12-09
没有人知道吗?
作者: lb8133
发布时间: 2010-12-09
我试了,没像你说的那样慢的
我用700k的图转换也就是瞬间的事
作者: colorall
发布时间: 2010-12-09
你这不叫同时转换。
转换的时候看看CPU占用率,如果一个线程已经占70 -80了的话,使用多线程也没有意义。
多线程只有在瓶颈不是cpu的时候才有意义。像读写磁盘,输出字符到屏幕这些比较慢的操作,cpu没有100%,这样使用多线程,在一个线程等待IO或者输出操作的时候另一个线程可以运行。
作者: findcaiyzh
发布时间: 2010-12-09
lz你是不是内存不足,使用虚拟内存了。
作者: findcaiyzh
发布时间: 2010-12-09
你是要把这个图像的文件数据转换为base64 还是这个图片的文件名称或者路径转换为base64?还是打算把这个图片所包含的图像信息转换为base64?
第一种做法类似hash值
第二种 就是 把图片每个像素的值转换为base4
第三种就是类似迅雷地址那类base64编码
看你的代码是直接把这个文件的二进制代码之间转化为base64
作者: rongqiumao
发布时间: 2010-12-09
引用 5 楼 rongqiumao 的回复:
你是要把这个图像的文件数据转换为base64 还是这个图片的文件名称或者路径转换为base64?还是打算把这个图片所包含的图像信息转换为base64?
第一种做法类似hash值
第二种 就是 把图片每个像素的值转换为base4
第三种就是类似迅雷地址那类base64编码
看你的代码是直接把这个文件的二进制代码之间转化为base64
图片文件是要转换为BASE64然后存贮在数据库里
作者: lb8133
发布时间: 2010-12-09
努力学习
作者: q6196310920
发布时间: 2010-12-09
引用 2 楼 colorall 的回复:
我试了,没像你说的那样慢的
我用700k的图转换也就是瞬间的事
你的机器内存是1个G的,用上面的程序,转换这三张70K/张的照片用了3分钟左右。
您是一张张转的?试过转3张吗?
作者: lb8133
发布时间: 2010-12-09
看看CPU占用率,在决定是否使用多线程
ref 传递参数
或线程是否执行完毕
作者: wuyq11
发布时间: 2010-12-09
在说明一下,变慢的原因是因为后面这句
string bbc2 = HttpUtility.UrlEncode(bbc1, Encoding.UTF8);
再次进行了编码,有什么办法么?
使用string bbc2 = HttpUtility.UrlDecode(bbc1, Encoding.UTF8);不到两秒就出来了,但是不许我需要的数据,必须进行UrlEncode,但是这样很慢。
作者: lb8133
发布时间: 2010-12-09
引用 9 楼 wuyq11 的回复:
看看CPU占用率,在决定是否使用多线程
ref 传递参数
或线程是否执行完毕
这个程序一运行,CPU的占用率稳定在60%以上
作者: lb8133
发布时间: 2010-12-09