c# - 什么构成了昂贵的方法或资源?

标签 c#

人们经常提到异常是昂贵的,.NET 中的各种方法也是昂贵的。

什么是 .NET 中昂贵的方法?

是方法处理的时间吗?例如。我使用 WebClient 对象获取了网页的响应流(这不是异步的),并且在获取响应并将其分配给变量时,单步执行这行代码需要一段时间。也许是因为网页本身图形密集而且很大。要查看所用时间,我知道我可以使用秒表或计时器(我不记得这两者之间存在细微差别)。

或者是占用的资源?如果是这样,查看方法占用资源的最佳方式是什么?我知道我可以使用其中一种 GC 方法或分析器。还有哪些其他方法?

最佳答案

昂贵是度数和背景的问题。

我从事图像处理工作,我认为除法很昂贵。在我的例子中,任何最终在一个循环中执行 2 到 500 万次的操作加起来。这可能是 1/8 秒和 1/32 秒之间的差异。 UI 时间的 1/8 秒对于动态显示来说已经很多了。 1/32 是可以接受的。

在其他情况下,它可能是对大型 JPEG 图像进行完全解码并将其缩小,而不是利用同样编码在同一文件中的 2 个缩小版本的功能。

在网页时间,它可能是页面加载时服务器点击的次数。明白我的意思了吗?

上下文就是一切。

如果资源稀缺并导致其他事情等待,则资源被认为是昂贵的。如果你有 1 个非 raid 磁盘,如果两个进程在整个地方跳动磁头,你将在访问上付出沉重的代价,因此严重依赖驱动器和操作系统中的缓存。

您的打印机是一种非常昂贵的资源,尤其是当它没纸时,因此需要排队。

与其他语言特性相比,异常是昂贵的。静态方法调用很便宜。普通方法调用稍微昂贵一些。虚方法调用稍微贵一些。异常的代价要高得多。

例如,您可以提示 C# 没有强类型多态返回类型,而我可以说 - 哦不,它有 - 只需抛出结果并在另一端捕获正确的类型。然后我会因为提出建议而被 mock 。与返回(很少的指令)相比,Exception 可能会导致数十到数百,具体取决于上下文。

关于c# - 什么构成了昂贵的方法或资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/354845/

相关文章:

c# - Visual Studio 警告级别的含义?

c# - XML API 子项返回函数?

c# - 协变对象初始值设定项?

c# - 使用 LINQ 生成 XML 时如何从元素中删除 xmlns?

c# - 如何使用 Razor EditorFor Helper 创建一个包含 ViewBag 中的值的 TextBox

c# - unity C# 如何获取玩家的国家、城市或位置

c# - 在 C# 中获取 Flash 文件的运行时间的最可靠方法是什么?

c# - 新的 DbConnection 性能

c# - 如何使用 C# 在 webdriver 2 中使用 xpath 获取 webtable 中的确切行数

c# - IoC 对我的工厂单例的好处