ℌ𝔢𝔶𝔦𝔱𝔰𝔅𝔩𝔞𝔡𝔢ℜ𝔲𝔫𝔯
2021-08-12T13:14:05+00:00
写了个cli+dll的c#小爬虫,爬完几个网页竟然用了6MB内存,感觉有点问题。。
需要我给上代码吗,复杂的语法只是用到了正则表达式和List<string>泛型而已
仓库 [url]https://gitee.com/crella/frinan[/url],class1.cs是dll,program.cs是cli启动程序
Reply to [pid=543446078,28169053,1]Reply[/pid] Post by [uid=40510243]DDD粒[/uid] (2021-08-21 21:27)
程序员还是要有点追求
装个360,点下那个圆球,清理下。[img]http://img.nga.178.com/attachments/mon_201209/14/-47218_5052bc4cc6331.png[/img]
[quote][pid=543448517,28169053,1]Reply[/pid] Post by [uid=62953097]马在草原失眠[/uid] (2021-08-21 21:37):
程序员还是要有点追求[/quote]自己debug一下,看看跑的时候什么变量没释放不就知道了
java程序员建议不要在这个地方浪费时间[s:ac:哭笑]
单机内存总有上限,为什么不直接上分布式,把分布式学好就完了,有分布式系统还差那点内存么[s:ac:哭笑]
当然我不是很懂你们c/cpp程序员……
不懂你写个c井还有什么好扣内存的,chrome一开就是2个g往上的内存占用还不是照样用?
真爱扣细节你咋不去写c呢,用指针和malloc,保证把内存扣得细细的[img]http://img.nga.178.com/attachments/mon_201209/14/-47218_5052bca2a2f43.png[/img]
[quote][tid=28169053]Topic[/tid] Post by [uid=62953097]马在草原失眠[/uid] (2021-08-21 21:23):
写了个cli+dll的c#小爬虫,爬完几个网页竟然用了6MB内存,感觉有点问题。。
需要我给上代码吗,复杂的语法只是用到了正则表达式和List<string>泛型而已
仓库 [url]https://gitee.com/crella/frinan[/url],class1.cs是dll,program.cs是cli启动程序[/quote]6mb内存算啥。。。 有些语言运行个helloworld都要好几十mb
内存这东西别用的太夸张就行 现在pc和服务器内存都很大 优化基本也更关注cpu方面
另外就是长时间跑的程序别有内存泄露问题就行
6m太少了 多爬一点 爬几百个再说
再说很多网页本身也不小
优化方法就是看看变量有没有重复生成,注意回收
没必要,之后在考虑,又不会内存泄漏。写c/c++得看,要是内存泄露了就惨了。
6mb就不要花时间去折腾了,并行跑100个也才600m,chrome随便打开一个网页就有100m占用了。
优化内存主要是几个方法,本来我们是用空间来换时间,用内存的占用省掉加载过程中的时间,而有的情况下,又不得不通过多次加载来减少内存的占用。
你做一个很大的数据处理,现在正常用的电脑内存是8g左右,那你不能一下子把8g的数据全放内存里,考虑到多进程的因素,你单进程考虑用到2g内存就可以了,如果文件小于2g,一波就处理完了,大于2g的需要分块处理,代码上要有分块加载排队处理,完了还要把结果合并的逻辑。就比一波处理完逻辑上复杂。这就是优化内存使用的原理或者说原型。更复杂的,多线程共享使用,多进程并行处理,对于数据使用的加载走异步模式等。
你可以用C写.......大部分现代的VM或者runtime都会自己管理内存块的, 释放之后不会马上还给系统的.......
没到实在不能忍的程度, 当然是选择加内存和加运行的服务器了[s:ac:哭笑]
6M很多吗,现在谁也不在乎
真要在乎的话,我没看到要保存list然后再输出的必要性啊
直接输出不就可以把存储的部分省下了吗
都什么年代了,内存这种东西只要不泄露就行。大多数优化内存的目的是减少syscall,而不是内存占用[s:ac:茶]
用了80g内存的c艹程序员觉得你这个完全是小case
有时间就研究下,一般业务上不太会对内存有很严格的要求,只要不是非常夸张就好。真的发生内存耗尽的时候,才会考虑优化内存。