C# 什么是昂贵的方法或资源?

C# 什么是昂贵的方法或资源?,c#,C#,人们经常提到异常是昂贵的,而.NET中的各种方法也是昂贵的 在.NET中,什么构成了一个昂贵的方法 该方法处理所需的时间是多少?例如,我使用WebClient对象获取了一个网页的响应流,这不是异步的,当获取响应并将其分配给一个变量时,需要一段时间来逐步完成这行代码。也许是因为网页本身是图形密集型和大型的。要知道所用的时间,我知道我可以用秒表或计时器。两者之间有一个细微的差别,我记不起来了 还是资源被占用了?如果是这样,查看方法所需资源的最佳方式是什么?我知道我可以使用其中一种GC方法或分析器。还

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

在.NET中,什么构成了一个昂贵的方法

该方法处理所需的时间是多少?例如,我使用WebClient对象获取了一个网页的响应流,这不是异步的,当获取响应并将其分配给一个变量时,需要一段时间来逐步完成这行代码。也许是因为网页本身是图形密集型和大型的。要知道所用的时间,我知道我可以用秒表或计时器。两者之间有一个细微的差别,我记不起来了


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

答案是,这两种操作都很昂贵


我个人使用RedGate的ANTs Profiler来记录应用程序事件的时间和内存方面以及成本。

答案是这两种类型的操作都很昂贵


我个人使用RedGate的ANTs Profiler来记录应用程序事件的时间和内存方面以及成本。

昂贵是程度和上下文的问题

我在图像处理方面工作,我认为分割很贵。在我的例子中,任何一个操作在一个循环中被执行了两百万到五百万次,加起来就是。这可能是1/8秒和1/32秒之间的差异。1/8秒的UI时间对于动态显示来说非常重要。1/32是可以接受的

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

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

环境就是一切

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

您的打印机是一个非常昂贵的资源,尤其是当它的纸张用完时,因此需要排队

与其他语言功能相比,异常是昂贵的。静态方法调用很便宜。普通方法调用稍微贵一些。虚拟方法调用稍微贵一些。例外情况的成本要高得多


例如,你可以抱怨C没有类型强多态返回类型,我可以说-哦,不,它有-只是抛出你的结果,在另一边捕捉正确的类型。然后我会因为提出这个建议而被笑出房间。与返回的指令很少相比,异常可能会导致数十到数百条指令,具体取决于上下文。

代价取决于程度和上下文

我在图像处理方面工作,我认为分割很贵。在我的例子中,任何一个操作在一个循环中被执行了两百万到五百万次,加起来就是。这可能是1/8秒和1/32秒之间的差异。1/8秒的UI时间对于动态显示来说非常重要。1/32是可以接受的

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

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

环境就是一切

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

您的打印机是一个非常昂贵的资源,尤其是当它的纸张用完时,因此需要排队

与其他语言功能相比,异常是昂贵的。静态方法调用很便宜。普通方法调用稍微贵一些。虚拟方法调用稍微贵一些。例外情况的成本要高得多


例如,你可以抱怨C没有类型强多态返回类型,我可以说-哦,不,它有-只是抛出你的结果,在另一边捕捉正确的类型。然后我会因为提出这个建议而被笑出房间。与返回的指令很少相比,异常可能会导致数十到数百条指令,具体取决于上下文。

是的,当人们谈论函数昂贵时,通常指的是执行时间。调用它的代价是线程被阻塞X微秒,直到函数调用完成

当然,这也可能是昂贵的条款
是的,当人们谈论函数昂贵时,他们通常指的是执行时间。调用它的代价是线程被阻塞X微秒,直到函数调用完成


当然,就资源使用而言,它可能也很昂贵,但通常情况下,人们指的是执行时间。

我同意普林特的观点,但我想补充一点,昂贵通常意味着某些事情需要比预期更多的时间或资源,或者比特定情况下所需的资源更多。一般来说,如果有一种替代方案使用更少的cpu或更合适的资源,那么某些东西是昂贵的

例如,异常被认为是昂贵的,因为构造堆栈跟踪需要大量的时钟周期。因此,使用异常作为流控制机制是一个非常糟糕的想法。因此,如果您正在解析一个自定义数据格式,但它的格式不正确,那么最好返回一个状态为failure且数据行6 pos 3字符串格式不正确的对象,而不是抛出一个格式不正确的DDataException


但是,是的,昂贵是一个程度和角度的问题。对于CPU设计者来说,缓存未命中是灾难性的。对普林特来说,分工是昂贵的。对我来说,硬盘访问是昂贵的

我同意普林特的观点,但我想补充一点,昂贵通常意味着某些事情需要比您预期的更多的时间或资源,或者比您在特定情况下需要的更多的资源。一般来说,如果有一种替代方案使用更少的cpu或更合适的资源,那么某些东西是昂贵的

例如,异常被认为是昂贵的,因为构造堆栈跟踪需要大量的时钟周期。因此,使用异常作为流控制机制是一个非常糟糕的想法。因此,如果您正在解析一个自定义数据格式,但它的格式不正确,那么最好返回一个状态为failure且数据行6 pos 3字符串格式不正确的对象,而不是抛出一个格式不正确的DDataException


但是,是的,昂贵是一个程度和角度的问题。对于CPU设计者来说,缓存未命中是灾难性的。对普林特来说,分工是昂贵的。对我来说,硬盘访问是昂贵的

旁注:.NET异常的成本通常会被夸大几个数量级。除非每秒抛出数千个异常,否则没有必要担心它们。旁注:.NET异常的成本通常会被夸大几个数量级。除非你每秒钟都要扔掉成千上万的垃圾,否则你没必要担心它们。