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博客

相关推荐
csbysj20201 小时前
Vue.js 混入:深入理解与最佳实践
开发语言
Gerardisite2 小时前
如何在微信个人号开发中有效管理API接口?
java·开发语言·python·微信·php
Want5952 小时前
C/C++跳动的爱心①
c语言·开发语言·c++
coderxiaohan3 小时前
【C++】多态
开发语言·c++
gfdhy3 小时前
【c++】哈希算法深度解析:实现、核心作用与工业级应用
c语言·开发语言·c++·算法·密码学·哈希算法·哈希
百***06013 小时前
SpringMVC 请求参数接收
前端·javascript·算法
Eiceblue3 小时前
通过 C# 将 HTML 转换为 RTF 富文本格式
开发语言·c#·html
故渊ZY3 小时前
Java 代理模式:从原理到实战的全方位解析
java·开发语言·架构
leon_zeng04 小时前
Qt Modern OpenGL 入门:从零开始绘制彩色图形
开发语言·qt·opengl
会飞的胖达喵4 小时前
Qt CMake 项目构建配置详解
开发语言·qt