调用API函数是否被视为昂贵的操作? (将其与作为我申请的一部分的函数调用进行比较时)
我知道一些API函数会导致内核模式的跳跃,但对所有这些函数都是如此吗?
更具体一点:调用GetThreadId功能有多贵?
答案 0 :(得分:6)
任意线程的GetThreadId需要内核切换,因此它比从用户模式检索缓存数据的GetCurrentThreadId更昂贵。
API的成本高度依赖于API本身的性质。从用户模式检索缓存值的API非常便宜,转换到内核模式的API要贵得多,大约为微秒。读取或写入磁盘的API可能需要几十毫秒的时间。在网络上工作的API可能需要几秒钟或几分钟。
答案 1 :(得分:3)
中等便宜。有一个用户/内核模式转换,但在内核中,它只是一个简单的内存读取。取消引用句柄,从结构中获取ID。
更具体:您看到了哪些可行的替代方案?
编辑:除非它是你所追求的当前线程ID。 GetCurrentThreadId()完全是用户模式,因此非常非常便宜。
答案 2 :(得分:3)
对所有人来说并非如此。对于大多数API调用,它只是调用DLL内部的东西而不需要模式转换。在这种情况下,每次呼叫将是几纳秒到几十纳秒。