/// <summary>
/// 压缩
/// </summary>
/// <param name="data">数据源</param>
/// <param name="blockSize">块大小</param>
/// <param name="mxDegreeOfParallelism">线程数量</param>
/// <returns></returns>
public static MemoryStream CompressString(string data, int blockSize,int mxDegreeOfParallelism=-1)
{
// 将字符串转换为字节
byte[] inputBytes = Encoding.UTF8.GetBytes(data);
// 创建一个用于保存所有压缩块的内存流
MemoryStream resultStream = new MemoryStream();
// 使用一个线程安全的集合来保存压缩后的块
ConcurrentBag<(int, byte[])> compressedBlocks = new ConcurrentBag<(int, byte[])>();
// 计算需要多少块
int blockCount = (int)Math.Ceiling((double)inputBytes.Length / blockSize);
// 使用并行处理来压缩块
ParallelOptions options =