新足迹

 找回密码
 注册

精华好帖回顾

· 新人报道贴, 香辣猪蹄,夫妻肺片,茄汁虾,肉糜刀豆,青菜蘑菇,黄瓜蛋汤 (2007-6-9) miss99 · 爸爸菜谱 - 蟹粉豆腐 (2008-3-9) patrickzhu
· 【说说小生意的那些事】干洗店 (2010-1-21) ozsmallbizowner · 还有愿意忆苦思甜的吗?---《回忆玛蒂尔德》 (2005-9-20) lilytop
Advertisement
Advertisement
12
返回列表 发新帖
楼主:DDD888

[IT] asp.net web framework memory [复制链接]

发表于 2022-10-21 22:47 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-10-21 07:12
你说的人员招聘,此言差矣,按你所说,公司在招聘人员的时候,不应该选个最优秀的啦,而应该选个最差的啦 ...

用C#人的比用Rust的多很多, 因此优秀人才也多很多。 所以更容易招聘到。 不知道你怎么会得出要招最差的人这样的结论?

我用的语言没有你多, 而且刻意避免学太多语言。 只要精深一两种语言就够了,另外选一两种语言为辅,学语言很简单, 100小时,20多天就够了, 但要做到精通就是1万小时的投入。

你列举的那么多语言, 把sql也算上了,请问是否做到门门精通了?而且每种语言都有分支, 比如Javascript, 早就脱离了手写代码时代,之前有jquery, 现在有三大框架, 数据库也是,关系型, NOSQL两大类下面又有好几个产品。这些掌握到什么程度呢?

后面还有设计模式, devops, 单元/集成测试工具, 容器化部署, 领域建模。 甚至根据自己业务场景调整通用ai算法。都是软件产品需要考虑的部分。开发语言只是这些众多环节中的一个而已。

我比较遵循奥卡姆剃刀原理: 若无必要, 勿增实体。因为工作内容是web产品, 所以语言就选c#后端, js前端。另外用python处理ai相关事务。其他的够用就行。 这样有更多的精力放在架构, 建模, 产品设计, 工程化管理和质量管理上。


Advertisement
Advertisement

发表于 2022-11-16 12:03 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
flyspirit 发表于 2022-10-21 22:47
用C#人的比用Rust的多很多, 因此优秀人才也多很多。 所以更容易招聘到。 不知道你怎么会得出要招最差的 ...

你这话让用写java的如何想啊?显然太狭隘了

发表于 2022-11-16 17:23 |显示全部楼层
此文章由 lunatic_C_G 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 lunatic_C_G 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 lunatic_C_G 于 2022-11-16 18:18 编辑
flyspirit 发表于 2022-10-21 21:47
用C#人的比用Rust的多很多, 因此优秀人才也多很多。 所以更容易招聘到。 不知道你怎么会得出要招最差的 ...

容器化部署, 领域建模

“领域建模”就是DDD(domain driven design)相关吧
笑看垄断资本党国的虚拟散户自嗨

发表于 2022-11-16 23:05 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-11-16 12:03
你这话让用写java的如何想啊?显然太狭隘了

Java比C#的人才储备更多。 尤其是在中国, 招高水平的Java比招同等水平的C#工程师要容易不少。 就是因为人才基数差异。

发表于 2022-11-16 23:05 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
lunatic_C_G 发表于 2022-11-16 17:23
“领域建模”就是DDD(domain driven design)相关吧

领域建模是DDD其中的一部分。

发表于 2022-11-16 23:40 |显示全部楼层
此文章由 pengruijun 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 pengruijun 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 pengruijun 于 2022-11-16 23:42 编辑

这不是语言和runtime的问题,需要采用micro service 架构,然后container, 用kubernetes 来orchestra ,这样你的service 就可以replicate,mono单服务架构是会越来越大
Advertisement
Advertisement

发表于 2022-11-17 12:44 |显示全部楼层
此文章由 axiaobug 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 axiaobug 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-10-21 06:23
根据我的体验,csharp java在内存管理技术层次上是一个级别的,很难像你所说牵扯到内存泄漏啦,我同事写 ...

感觉使用了非托管代码。

发表于 2022-11-17 12:47 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
axiaobug 发表于 2022-11-17 12:44
感觉使用了非托管代码。

我想我应该没有,至于使用到第三方dotnet assembly就不知道啦,反正我写的网站用的内存量的表现和我同事用的类似啦,代码是分开的,完全不同的。

2012年度奖章获得者 2011年度奖章获得者

发表于 2022-11-17 14:26 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
有些问题你没讲清楚,你的app 是asp.net mvc架构还是asp.net web api + SPA,如果是前者,自然用的内存多。

发表于 2022-11-17 14:29 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
交易人生 发表于 2022-11-17 14:26
有些问题你没讲清楚,你的app 是asp.net mvc架构还是asp.net web api + SPA,如果是前者,自然用的内存多。 ...

我从2011年老板雇佣我写网站asp.net mvc架构掺和了asp.net web api + SPA,两者并存

2012年度奖章获得者 2011年度奖章获得者

发表于 2022-11-17 14:38 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-11-17 14:29
我从2011年老板雇佣我写网站asp.net mvc架构掺和了asp.net web api + SPA,两者并存 ...


如果是mvc,用户login之后会保留session,一堆session数据,rendering也在server端,假如你有100个用户同时操作,不缺内存才怪;如果纯的spa,你的server端只处理数据,rendering都在client端,如果server端是per call的web api,client端拿完数据后,session就close了。你只需要全部改成spa+web api,就能解决问题。
0  to 1
Advertisement
Advertisement

发表于 2022-11-17 14:51 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
交易人生 发表于 2022-11-17 14:38
如果是mvc,用户login之后会保留session,一堆session数据,rendering也在server端,假如你有100个用户同 ...

我想你说的是asp.net web farm session, 我不用asp.net web farm,应该没有你说的多用户session问题

2012年度奖章获得者 2011年度奖章获得者

发表于 2022-11-17 16:52 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-11-17 14:51
我想你说的是asp.net web farm session, 我不用asp.net web farm,应该没有你说的多用户session问题 ...

没有, 我就是指的asp.net mvc 的session。

0  to 1

发表于 2022-11-17 19:09 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 DDD888 于 2022-11-17 19:29 编辑
交易人生 发表于 2022-11-17 16:52
没有, 我就是指的asp.net mvc 的session。


我搜索了下project里的关键字session,没找到几个,我是大量使用了controller viewdata,但我认为应该随着客户不访问网站,相应的viewdata应该被自动释放呀,不应该造成内存占用

2012年度奖章获得者 2011年度奖章获得者

发表于 2022-11-21 11:20 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-11-17 19:09
我搜索了下project里的关键字session,没找到几个,我是大量使用了controller viewdata,但我认为应该随着 ...

基本概念要搞清楚,.net什么时候释放用过的内存,1)内存不够用的时候,2)到达一个临界点 3)强行用GC.Collect,除了你用强行释放内存,不然从resource monitor看到的内存情况不是真正的数据。另外你说的session data和我说的session不是一个概念。
0  to 1

发表于 2022-11-21 11:23 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
交易人生 发表于 2022-11-21 11:20
基本概念要搞清楚,.net什么时候释放用过的内存,1)内存不够用的时候,2)到达一个临界点 3)强行用GC.Co ...

强行用GC.Collect并非我想要的
Advertisement
Advertisement

2012年度奖章获得者 2011年度奖章获得者

发表于 2022-11-21 16:14 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-11-21 11:23
强行用GC.Collect并非我想要的

那你resource monitor 看到的也不是真实的内存使用情况。
0  to 1

发表于 2022-11-22 06:38 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
交易人生 发表于 2022-11-21 16:14
那你resource monitor 看到的也不是真实的内存使用情况。

但老板以此和我讨论说内存用的太多。

2012年度奖章获得者 2011年度奖章获得者

发表于 2022-11-22 09:34 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-11-22 06:38
但老板以此和我讨论说内存用的太多。

那你就加上GC。Collect做个实验,然后再去掉,不然就是瞎猜。
0  to 1

发表于 2022-11-25 17:09 |显示全部楼层
此文章由 lunatic_C_G 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 lunatic_C_G 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 lunatic_C_G 于 2022-11-28 18:56 编辑

ASP.NET Core 中的内存管理和垃圾回收
按照它这个描述的去排查不能解决吗
也可能是static代码问题 分析.netcore代码在linux下内存过高问题
笑看垄断资本党国的虚拟散户自嗨

发表于 2022-11-28 11:36 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
lunatic_C_G 发表于 2022-11-25 17:09
ASP.NET Core 中的内存管理和垃圾回收
按照它这个描述的操作不能解决吗
也可能是static代码问题 分析.netc ...

下面的描述太可怕了,我肯定是用了许多GetHttpClient1这样的代码,我一直以为这是标准代码,让我去共享static GetHttpClient2的方式我肯定是做不到的
____________________________________________________________________________________
HttpClient
未正确使用 HttpClient 可能会导致资源泄漏。 系统资源(如数据库连接、套接字、文件句柄等):

比内存更短缺。
在泄漏时出现的问题比内存更多。
经验丰富的 .NET 开发人员知道要对实现 IDisposable 的对象调用 Dispose。 未释放实现 IDisposable 的对象通常会导致内存泄漏或系统资源泄漏。

HttpClientIDisposable实现,但不应在每个调用上释放。 而是应重用 HttpClient。

下面的终结点会对每个请求创建并释放新的 HttpClient 实例:

C#

复制
[HttpGet("httpclient1")]
public async Task<int> GetHttpClient1(string url)
{
    using (var httpClient = new HttpClient())
    {
        var result = await httpClient.GetAsync(url);
        return (int)result.StatusCode;
    }
}
在负载下,记录了以下错误消息:


复制
fail: Microsoft.AspNetCore.Server.Kestrel[13]
      Connection id "0HLG70PBE1CR1", Request id "0HLG70PBE1CR1:00000031":
      An unhandled exception was thrown by the application.
System.Net.Http.HttpRequestException: Only one usage of each socket address
    (protocol/network address/port) is normally permitted --->
    System.Net.Sockets.SocketException: Only one usage of each socket address
    (protocol/network address/port) is normally permitted
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port,
    CancellationToken cancellationToken)
即使释放了 HttpClient 实例,实际网络连接也需要一些时间才能由操作系统释放。 持续创建新连接时,会发生端口耗尽。 每个客户端连接都需要自己的客户端端口。

防止端口耗尽的一种方法是重用同一个 HttpClient 实例:

C#

复制
private static readonly HttpClient _httpClient = new HttpClient();

[HttpGet("httpclient2")]
public async Task<int> GetHttpClient2(string url)
{
    var result = await _httpClient.GetAsync(url);
    return (int)result.StatusCode;
}
HttpClient 实例会在应用停止时释放。 此示例演示并非每个可释放资源都应在每次使用后释放。
Advertisement
Advertisement

发表于 2022-11-28 11:38 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
交易人生 发表于 2022-11-22 09:34
那你就加上GC。Collect做个实验,然后再去掉,不然就是瞎猜。

我感觉毫无必要啦,即使在gc.collect后降到10兆字节一下,又有啥作用呢?难道要每隔段时间调用下gc.collect吗?

2012年度奖章获得者 2011年度奖章获得者

发表于 2022-11-28 12:26 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-11-28 11:38
我感觉毫无必要啦,即使在gc.collect后降到10兆字节一下,又有啥作用呢?难道要每隔段时间调用下gc.collec ...

用gc.collect是要证明内存是否用的太多,是不是存在memory leaking,如果用到gc.collect之后,appliaton内存降到10m以下,证明applicaiton没啥问题;当你用managed code使用内存资源,使用完后,内存并不马上释放。
0  to 1

发表于 2022-11-29 18:18 |显示全部楼层
此文章由 lunatic_C_G 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 lunatic_C_G 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 lunatic_C_G 于 2022-11-29 22:19 编辑
DDD888 发表于 2022-11-28 10:36
下面的描述太可怕了,我肯定是用了许多GetHttpClient1这样的代码,我一直以为这是标准代码,让我去共享st ...


做类似GetHttpClient2的拓展处理也不是不行:
  1 搞个类HttpClientExt继承下HttpClient,加个工作状态flag;
  2 弄个PoolService维护下List<HttpClientExt>,做懒加载处理和复用HttpClientExt对象;
  3 GetHttpClientX里invoke,ioc或者直接使用随意
笑看垄断资本党国的虚拟散户自嗨

发表于 2022-11-29 20:48 |显示全部楼层
此文章由 炸鸡翅 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 炸鸡翅 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-11-28 11:36
下面的描述太可怕了,我肯定是用了许多GetHttpClient1这样的代码,我一直以为这是标准代码,让我去共享st ...

别这样写代码。常规做法是用 IoC/Dependency Injection, 把 HttpClient 注册成 Singleton,整个application/service就只有一个HttpClient instance,根本无需dispose。

发表于 2022-11-30 06:44 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
炸鸡翅 发表于 2022-11-29 20:48
别这样写代码。常规做法是用 IoC/Dependency Injection, 把 HttpClient 注册成 Singleton,整个applicati ...

但单一实例会造成等待,莫名损失性能
Advertisement
Advertisement

发表于 2022-11-30 07:20 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
交易人生 发表于 2022-11-28 12:26
用gc.collect是要证明内存是否用的太多,是不是存在memory leaking,如果用到gc.collect之后,appliaton ...

asp.net core 简单website 用大量内存又不是啥稀奇事,google下就知道了,所以要不用csharp,用rust language啦

2012年度奖章获得者 2011年度奖章获得者

发表于 2022-11-30 10:05 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-11-30 07:20
asp.net core 简单website 用大量内存又不是啥稀奇事,google下就知道了,所以要不用csharp,用rust lang ...

.net是没有及时collect,其实那些内存已经没用了,不及时回收是为了运行速度,但不是memory leaking。回到rust,我坚信rust会用到很多内存,网上很多说rust很快,甚至快过c++,在想为什么?因为c/c++传统上是个中级语言,尤其c,很接近汇编了,后来看到文章说rust是self contained ,这是个投机取巧的把戏,比如c语言,显示个hellow world,本身调用了系统IO libraries ,而系统libs是存在硬盘上的,rust 很有可能在编译的时候,有自己的IO代码,直接编译到自己的application里,调用的时候所有东西一次性进入内存,所以快。这样有2个问题:1)能不能支撑大型的application 2)如果self contained ,rust团队要实现很多系统,才能达到self contained.
0  to 1

发表于 2022-11-30 11:42 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
交易人生 发表于 2022-11-30 10:05
.net是没有及时collect,其实那些内存已经没用了,不及时回收是为了运行速度,但不是memory leaking。回 ...

我想我有两年使用rust编程语言得到的感受应该可以回答你这个问题

最重要的一点是rust language和c语言都使用llvm编译器得到最终二进制代码

rust language和c/c++语言最大差别是c/c++语言依赖于程序员自觉性调用free, delete释放内存指针(如果程序员因为水平问题,或者写代码开小差,或者走神,忘记释放内存,或使用已释放内存,那都是运行时出错,适合被人hack ),而rust language通过编译将不合规的内存读取作为编译错误阻挡编译成功,强迫程序员改代码直到编译成功为止,而java, csharp是运行环境自动管理内存释放,程序员只管allocate,无需操心内存释放
因为rust language在编译后,所有lifetime的相关代码都不存在最终编译代码,那就是和c语言一样0调用

当然啦,和c语言比,rust language拥有最现代化的多线程编写方式,简单方便使用

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部