今天工作需要写了一个把图片转成字符串,并且压缩的小功能,其中用到了多线程去转换字符串,感觉写的还是不错的,拿出来分享一下
1 /// <summary> 2 /// 创建多核任务 3 /// </summary> 4 /// <param name="bytimages"></param> 5 /// <param name="count">创建几个核</param> 6 public string[] MoreTask(byte[] bytImages,int count) 7 { 8 string[] temps=new string[count]; 9 Task[] tasks = new Task[count]; 10 int length = bytImages.Length; 11 for (int i = 0; i < count; i++) 12 { 13 int a = i; 14 tasks[a] = Task.Factory.StartNew(() => dosomething(out temps[a], (length / count) * a, (length / count) * (a + 1), bytImages)); 15 // tasks[i] = Task.Factory.StartNew(() => dosomething(out temps[i], (length / count) * i, (length / count) * (i + 1), bytImages)); 16 } 17 Task.WaitAll(tasks); 18 19 return temps; 20 }
主要就是利用这个方法开启任意多个线程去处理转换任务。
然后分享一下字符串压缩的方法
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Web;
namespace testImage
{
public class ZipHelper
{
public static string Compress(string str)
{
//因输入的字符串不是Base64所以转换为Base64,因为HTTP如果不传递Base64则会发生http 400错误
return Convert.ToBase64String(Compress(Convert.FromBase64String(Convert.ToBase64String(Encoding.Default.GetBytes(str)))));
}
public static string Decompress(string str)
{
return Encoding.Default.GetString(Decompress(Convert.FromBase64String(str)));
}
public static byte[] Compress(byte[] bytes)
{
using (MemoryStream ms = new MemoryStream())
{
GZipStream Compress = new GZipStream(ms, CompressionMode.Compress);
Compress.Write(bytes, 0, bytes.Length);
Compress.Close();
return ms.ToArray();
}
}
public static byte[] Decompress(Byte[] bytes)
{
using (MemoryStream tempMs = new MemoryStream())
{
using (MemoryStream ms = new MemoryStream(bytes))
{
GZipStream Decompress = new GZipStream(ms, CompressionMode.Decompress);
Decompress.CopyTo(tempMs);
Decompress.Close();
return tempMs.ToArray();
}
}
}
}
}
主要代码就在这里了