WebClient

mirrorspace 2018-10-12 06:57:21
这个类使用时需要释放吗?
如果用一个全局的WebClient

static WebClient wc = new WebClient();

或者使用这种,要释放的
using(WebClient wc = new WebClient())
{

}

那么会不会有资源问题
...全文
310 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mirrorspace 2018-10-16
  • 打赏
  • 举报
回复
看来所谓的效率,其实在一定量级面前才需要考虑 这个方法比较随意,看起来是一个测试方法. 真正在项目中不会这样写程序
  • 打赏
  • 举报
回复
我给你说开来一点吧,比如说你(随随便便就可以需要)有一个方法是访问某个服务“获取某个店铺某个产品的代理合同”,是这么写的(这里只是举例,有语法错误自己理解逻辑就好)
public static Get代理合同(Product product)
var cmd = new 获取代理合同
{
    店铺 = "张三精品浑丸",
    产品 = product;
    年度 = 2019
};
var result = new WebClient().UploadData(url, Encoding.Utf8.GetBytes(JObject,FromObject(cmd)));
return JsonConvert.DeserializeObject<代理合同>(Encoding.Utf8.GetString(result));
}
这个方法,输入产品对象,输出代理合同。这个方法用到了 WebClient,那么你能直接说这个方法改为就使用静态 WebClient 实例就可以吗? 这个答案说明了你作过产品,还是只是做过一点练习。
  • 打赏
  • 举报
回复
这类应用,对于实践者,基本上都是需要短期对象来干事儿。所以习惯使然。
  • 打赏
  • 举报
回复
“对于效率的考虑”这个需要测试来证明这值1毛钱价值。 一般来说,这类对象弄一个静态变量引用,说明你的程序整体上是简单到只有单线程逻辑思维方式就够了,从不存在线程、并发设计。并且很短。
mirrorspace 2018-10-14
  • 打赏
  • 举报
回复
如此说来这个对象的使用在非静态时,是自动释放资源的. WebClient wc = new WebClient(); 根本不需要放在using里面. 并且没有必要使用全局的webclient()对象. 那么在需要循环调用发包的时候,是每次循环都建立一个这样的对象吗? 这样对于效率的考虑,会不会比静态的webclient要浪费资源? for(;;) { WebClient wc = new WebClient(); wc.get() .... }
  • 打赏
  • 举报
回复
”只做必要的事情“,编程时要以测试为准,要破除教条,深入理解机制。而不是死抠字眼儿。
  • 打赏
  • 举报
回复
“使用时需要释放”这个说法本身是有歧义的,实际上抠字眼儿的人立刻中招儿。 因为所有的 Compoment 对象都会在析构方法自动被 GC 调用 Dispose 方法,用不着你自己调用。编程中要手动调用 Dispose 是因为你知道如果不及时调用会有什么 bug 出现,这时候你才会花额外时间代价让程序去调用一遍 Dispose。根本没有任何人说要针对数十万种 Compoment 对象都要手动调用 Dispose。
  • 打赏
  • 举报
回复
使用局部变量引用的这类对象实例,在没有引用之后过不了几秒钟就会自动被 GC 销毁了。你为什么不销毁?又什么非要调用 Dispose? 如果你自己没事儿一定要找出各种“写法”来,那么你可能惹的事情是千奇百怪的。现在首先要搞明白你为什么要多余写代码呢?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧