C#高级:程序查询写法性能优化提升策略(附带Gzip算法示例)

一、基本要求

bash 复制代码
1.按需查询,不要的字段不查
2.缓存优先,内存比磁盘读写快(Redis也不要放太多的数据,按需存储,不然读写也慢)
3.线程并行,最后await输出所有结果
4.批量优先,插入或更新使用数据库批量操作
5.压缩算法,传输大量重复文本,避免网络大开销
6.耗时长操作推入消息队列,慢慢消费
7.循环内部短流程,不要for循环里面写耗时操作例如查库、读写文件
8.非必要不递归
9.非必要不加锁(尽量不要修改静态字段,尽量用实例字段)

二、Gzip算法

cs 复制代码
public class Program
{
    /*
        简介:Gzip是一种基于DEFLATE算法的无损数据压缩算法,广泛应用于文件压缩和网络数据传输。
        算法:DEFLATE 算法 =  LZ77字典编码 + 霍夫曼编码
        适用场景:大量重复内容文本、长文本
     */


    /// <summary>
    /// 压缩
    /// </summary>
    public static string CompressString(string text)
    {
        byte[] buffer = Encoding.UTF8.GetBytes(text);
        byte[] compressedData = null;
        using (var memoryStream = new MemoryStream())
        {
            using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Compress, true))
            {
                gZipStream.Write(buffer, 0, buffer.Length);
            }

            memoryStream.Position = 0;

            compressedData = new byte[memoryStream.Length];
            memoryStream.Read(compressedData, 0, compressedData.Length);
        }
        var gZipBuffer = new byte[compressedData.Length + 4];
        Buffer.BlockCopy(compressedData, 0, gZipBuffer, 4, compressedData.Length);
        Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gZipBuffer, 0, 4);
        return Convert.ToBase64String(gZipBuffer);
    }

    /// <summary>
    /// 解压
    /// </summary>
    public static string DecompressString(string compressedText)
    {
        byte[] gZipBuffer = Convert.FromBase64String(compressedText);
        using (var memoryStream = new MemoryStream())
        {
            int dataLength = BitConverter.ToInt32(gZipBuffer, 0);
            memoryStream.Write(gZipBuffer, 4, gZipBuffer.Length - 4);

            var buffer = new byte[dataLength];

            memoryStream.Position = 0;
            using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Decompress))
            {
                gZipStream.Read(buffer, 0, buffer.Length);
            }

            return Encoding.UTF8.GetString(buffer);
        }
    }

    static async Task Main(string[] args)
    {
        // 测试1:高度重复的文本
        var repetitiveText = new string('A', 1000) + new string('B', 1000) + new string('C', 1000);
        Console.WriteLine($"重复文本原始长度: {repetitiveText.Length}");
        var compressed1 = CompressString(repetitiveText);
        Console.WriteLine($"重复文本压缩后: {compressed1.Length}");
        Console.WriteLine($"压缩比: {(double)compressed1.Length / repetitiveText.Length:P}");

        // 测试2:你的原始文本
        var originalText = ""ConsoleApp1.exe"(CoreCLR: clrhost): 已加载...";
        Console.WriteLine($"\n原始文本长度: {originalText.Length}");
        var compressed2 = CompressString(originalText);
        Console.WriteLine($"原始文本压缩后: {compressed2.Length}");
        Console.WriteLine($"压缩比: {(double)compressed2.Length / originalText.Length:P}");

        // 测试3:JSON数据(通常压缩效果好)
        var jsonText = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}".Repeat(50);
        Console.WriteLine($"\nJSON文本长度: {jsonText.Length}");
        var compressed3 = CompressString(jsonText);
        Console.WriteLine($"JSON文本压缩后: {compressed3.Length}");
        Console.WriteLine($"压缩比: {(double)compressed3.Length / jsonText.Length:P}");
    }
}

三、相关技巧

C#高级:提升数据库查询效率的优化策略与方法_c# 分表查询-CSDN博客

相关推荐
带鱼吃猫1 分钟前
C++STL:从 0 到 1 手写 C++ string以及高频易错点复盘
开发语言·c++
u0109272713 分钟前
代码覆盖率工具实战
开发语言·c++·算法
码云数智-大飞6 分钟前
零拷贝 IPC:用内存映射文件打造 .NET 高性能进程间通信队列
java·开发语言·网络
懈尘9 分钟前
深入理解Java的HashMap扩容机制
java·开发语言·数据结构
Beginner x_u11 分钟前
JavaScript 核心知识索引(面试向)
开发语言·javascript·面试·八股
yqd66613 分钟前
RabbitMQ用法和面试题
java·开发语言·面试
We་ct14 分钟前
LeetCode 73. 矩阵置零:原地算法实现与优化解析
前端·算法·leetcode·矩阵·typescript
天赐学c语言14 分钟前
2.1 - 反转字符串中的单词 && 每个进程的内存里包含什么
c++·算法·leecode
程序员泠零澪回家种桔子16 分钟前
OpenManus开源自主规划智能体解析
人工智能·后端·算法
白日梦想家68118 分钟前
JavaScript性能优化实战系列(三篇完整版)
开发语言·javascript·性能优化