惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
J
Java Code Geeks
雷峰网
雷峰网
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
V
Vulnerabilities – Threatpost
S
Securelist
The Hacker News
The Hacker News
The Register - Security
The Register - Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Help Net Security
Help Net Security
G
Google Developers Blog
Hugging Face - Blog
Hugging Face - Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
AI
AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Schneier on Security
Schneier on Security
N
Netflix TechBlog - Medium
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
Hacker News - Newest:
Hacker News - Newest: "LLM"
H
Hacker News: Front Page
博客园 - 司徒正美
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
B
Blog
Microsoft Azure Blog
Microsoft Azure Blog
大猫的无限游戏
大猫的无限游戏
Security Latest
Security Latest
Engineering at Meta
Engineering at Meta
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threat Research - Cisco Blogs
U
Unit 42
V
V2EX
V2EX - 技术
V2EX - 技术
L
LINUX DO - 最新话题
aimingoo的专栏
aimingoo的专栏
Microsoft Security Blog
Microsoft Security Blog
Recorded Future
Recorded Future
P
Privacy & Cybersecurity Law Blog
美团技术团队
小众软件
小众软件
F
Fortinet All Blogs

博客园 - loli

SQL Server2005中的Intergate Service(SSIS)与Oracle数据库的迁移性能 站在别人的肩膀上的开发 在PD中导入Excel自动生成表结构 结束?开始! 更新一次,Grid的多列效果 Infragistics的Grid控件 - loli - 博客园 加入EReader团队的开篇章 C++/CLI draft 1.8 学习C++/CLI发现的一些问题,算不算Bug? 总结成了回顾 学习ULike.NET,也分析DirectX Sample BlogReader更新(只用Net2.0) BlogReader0.2后补设计图(含Net1.1版本下程序) 自写程序BlogReader 的一次升级,算是0.2了吧 BlogReader新的一点小些改动 话接上回,自写程序BlogReader 0.1版 自写VS2005程序BlogReader .Net1.1版本 话接上回,自写VS2005程序BlogReader 0.1.1.1版 仿SharpReader自写VS2005程序,有SharpReader的70%左右功能
BlogReader存盘方式修改
loli · 2004-12-29 · via 博客园 - loli

灵感之源在屡次声明时间太紧,没法更新博客,可依然还是抽空更新,学习的榜样。
相比,太是惭愧。要是如此下去,我的BlogReader也就无疾而终了。
所以这两天,少玩一下,做了一些更新。

原来版本的BlogReader采用启动的时候,将文章全部读入的方式,类似于SharpReader(当时就是抄他的)。
可是随着文章数量的增加,内存也同比增加。前几天,我的文章项有8500篇,光启动内存就到了60M。然后浏览更新操作一段时间,很快就能到80M,有时候离谱的到过一百兆。
于是决定改。首先想到的就是随用随取,换Channel就释放前面的Channel资源。想法挺好,现实却打击不小。随用随取,没问题,可是在释放资源的时候,确是用10减5,内存还是不停增加。分析原因有二:1、自身的代码不完善,资源申请了却没有很好得归还代码;二、Net在处理频繁的新建、删除对象时,垃圾收集并不能做的及时,而是有迟后。这仅是个人观点,希望大家交流。

在上一种情况下内存使用没有太多改善,宣告暂时此路不通。
然后想到是,是否可以部分载入?分析了一下博客站点,发现一个特点,标题是最经常看的,而内容往往感兴趣的才看。
于是想了一条比较好实现的途径,在原来大框架不变的情况下,将文章的内容单独存到可随机访问的流文件中,在Channel文件中维护一个链接列表。又考虑到文章项后经常加入删除,不可能采用添加就附到文件尾部做法。于是将流文件分块,每块大小1024字节,内容的原始大小小于1024,直接存盘,否则压缩再存盘。删除操作则将归还的块的位置在链接列表复位。

 Pos0

End 

 Pos1

 Pos2

 Pos2

 Pos4

 Pos3

 Pos5

 Pos4

 End

上面的示意图就是在某一情况下的链表,Pos0有一文件,小于1024。Pos1处有一文件,占用了3块空间,Pos1、Pos2
和Pos4。Pos3是当前的第一处空白块,指向下一个空白块。而Pos5则指向的是一个当前没有分配的空间。当Pos5使用,就分配后续的空间Pos6,否则维持文件大小不变。删除操作,修改原文件占用的最有一个快的指针,将其指向第一空白块,而第一空白块指针则指向删除文件的第一文件块。

在这样修改后,内存使用感觉改变还是比较明显的。通过Windows的性能监视,内存下降三分之一还强。而且长期运行优势更明显。
也希望在Net下内存使用经验丰富的各位,给与指导。
当然既然使用了压缩,那么在异步取网页的时候,也加入了支持gzip、deflate格式的能力。感觉在收取向博客园这样更新文件较大的博客网站时,帮助很大。
先写到这,由于代码还在改写中,所以这次没有上传。同上次一样,在Net2.0的环境下修改,所以也没有Net1.1 的文件。准备在两者同步的情况下,同时上传。