近来在用 DotNetty 实现一个文件上传下载嘚同步服务
其中:客户端下载服务端的文件,客户端多次请求从服务端将文件分片下载下来,追加到本地磁盘
—— 非常简单的代码,都写了几十次了驾轻就熟。
可是:在进行压力测试时我这边下载一个 Win10 的 ISO 镜像,4个G
我发现:客户端内存不停增长,直到内存溢出 —— 我擦
内存诊断,我们发现 有很多 16M(字节) 的 byte[] 占据着内存
而我请求服务端的 文件分片 只有 64K
通过调试代码,确实发现了 这些 16M 字节所在的位置:
知道了 内存泄漏 的数据 存在哪里剩下的就是 删除这些数据。
我猜:按照微软框架的习惯肯定有 属性 或 方法 能够设置 这个东西。
—— 昰我想太多我找了好久 都找不到 相关方法。
直到数据在哪里肯定有修正这些数据的方法。
反射是万能的 —— 但是我不想用
于是,开始反编译:查看这个 directArenas
字段在哪里 赋值、哪里添加数据
再次运行程序,内存稳定在 30M —— 内存泄漏问题解决
这次修改BUG,最废时间的 莫过于 DotNetty 毫无微软风格
微软框架基本都有一个风格:底层一定提供了各种 函数、属性 —— 默认会给你一个 最稳定的默认值。
尼玛这分明是 Java 的尿性:各种参数千奇百怪,不配参数还不能运行 —— 给我个默认参数 有那么难么~
DotNetty是不但使用了C#和.Net平台的技术特点并且保留了Netty原来绝大部分的编程接口。让我们在使用时完全可以依照Netty官方的教程来学习和使用DotNetty应用程序,接口文档查看时对应代码多看几次仔细阅读。
二、DotNetty项目各个程序集介绍
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。