我需要确定类似于TCPView可以执行的每个进程的网络使用情况统计信息。
Example http://img513.imageshack.us/img513/861/6601f15814544055a590e26.png
因此,在向我发布this question或this question副本时,我想指出的是,这两个都没有一个彻底的答案可以帮助我真正地做到这一点。
我一直在进行研究,并且显然有很多方法可以列出事件的连接及其关联的过程,无论是使用netstat还是其他Windows API(例如IpHlpAPI.dll)。
现在,从Google所做的事情来看,除了以下模糊的术语外,我发现的内容不多: GetPerTcpConnectionEStats 和 GetPerTcp6ConnectionEStats 。大概分别用于基于IPv4和IPv6的TCP。现在,我正在阅读它据称能够做我需要做的事情。但是,这仍然省去了UDP。并且这些在TCPViewer可以工作的XP系统上也不可用。
我对将它们用于TCP感到满意,但是问题是,我似乎找不到从C#中使用它们的任何示例。
所以我想这全都归结为以下几个问题:
整个要点是查看进程本身的独立带宽使用情况。不计算系统总带宽使用量。
在此先感谢您提供所有答案。
最佳答案
我花了一些时间试图弄清楚如何做类似的事情(延迟与带宽),但是由于缺乏投资时间而不得不放弃。我以为可以在这里添加我的发现,希望我们最终能得到答案。
显然,您将需要使用PInvoke,而且恐怕细节还远远超出我的经验。
此Wrapper Library on CodeProject使用的AllocateAndGetTcpExTableFromStack仅在Windows XP和Server 2003上有效。尽管遗憾,它仍然无法获得带宽。
我可以找到的最接近的信息(对于Vista/Server 2008或更高版本)是pinvoke.net上GetExtendedTcpTable的示例。
工具PInvoke Interop Assistant可能有助于确定如何调用非托管代码。
如果要继续尝试,我将尝试找出以下几点:
关于c# - 获取每个连接的带宽统计信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9651576/