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

推荐订阅源

爱范儿
爱范儿
博客园_首页
W
WeLiveSecurity
S
Secure Thoughts
S
Security @ Cisco Blogs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Hugging Face - Blog
Hugging Face - Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
H
Hacker News: Front Page
Project Zero
Project Zero
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
U
Unit 42
N
News and Events Feed by Topic
N
News and Events Feed by Topic
Hacker News - Newest:
Hacker News - Newest: "LLM"
Forbes - Security
Forbes - Security
T
Tor Project blog
I
Intezer
B
Blog
F
Full Disclosure
Security Archives - TechRepublic
Security Archives - TechRepublic
F
Fortinet All Blogs
Schneier on Security
Schneier on Security
T
Threat Research - Cisco Blogs
AI
AI
Google DeepMind News
Google DeepMind News
L
LINUX DO - 最新话题
Cloudbric
Cloudbric
L
Lohrmann on Cybersecurity
WordPress大学
WordPress大学
博客园 - 聂微东
雷峰网
雷峰网
P
Privacy International News Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
PCI Perspectives
PCI Perspectives
Y
Y Combinator Blog
Spread Privacy
Spread Privacy
Simon Willison's Weblog
Simon Willison's Weblog
罗磊的独立博客
Vercel News
Vercel News
A
Arctic Wolf
The Register - Security
The Register - Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
H
Heimdal Security Blog
Know Your Adversary
Know Your Adversary
P
Proofpoint News Feed
C
Cybersecurity and Infrastructure Security Agency CISA
P
Proofpoint News Feed

博客园 - 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 的文件。准备在两者同步的情况下,同时上传。