我之前从未注意过,但显然代表进程ID的数据类型与本机Windows API和.NET Process.Id
不同。具体而言,GetCurrentProcessId
定义为
DWORD WINAPI GetCurrentProcessId(void);
...而DWORD
当然被定义为unsigned long
。 .NET的System.Diagnostics.Process.Id
定义为
public int Id { get; }
... int
当然是签名值。
由于该值的最终来源是Windows内核,并且该值预期与通过Windows API调用或通过.NET的本机Process.Id
看到的相同,所以为什么两者返回的数据类型不同?
我理解,因为Windows内核试图将流程ID保持在频谱的低端(出于非技术原因),即使是最强大的机器也没有足够的资源来托管足够的流程来推动有符号整数的上限。但是,这仍然无法证明创建类型不匹配的合理性。
那么为什么会出现这种差异呢?应该使用互操作来获取进程ID并避免使用.NET获取id的方法吗?