我需要确定与TCPView可以做的类似的每进程网络使用情况统计信息。
Example http://img513.imageshack.us/img513/861/6601f15814544055a590e26.png
所以在你拍我发布this question或this question的副本之前,我想指出的是,这些都没有一个彻底的答案可以帮助我实际做到这一点。
我一直在做研究,很明显有许多方法可以列出活动连接及其相关流程,无论是使用netstat还是其他Windows API,如IpHlpAPI.dll。
现在,根据谷歌的做法,我没有找到太多 - 除了这些模糊的术语: GetPerTcpConnectionEStats 和 GetPerTcp6ConnectionEStats 。大概分别用于TCP over IPv4和IPv6。现在我正在阅读它所谓的能够做我需要做的事情。但是,这仍然留下了UDP。这些也不适用于TCPViewer可以使用的XP系统。
我会对使用TCP的那些感到满意,但问题是,我似乎无法找到如何在C#中使用它们的任何示例。
所以我想这一切归结为这几个问题:
这一点的全部意义在于查看进程本身的独立带宽使用情况。不计算系统总带宽使用情况。
提前感谢任何和所有答案。
答案 0 :(得分:1)
我花了一些时间试图弄清楚我是如何做类似的事情(延迟与带宽)但由于缺乏投入时间而不得不放弃。我想我会在这里添加我的发现,希望我们最终得到答案。
你显然需要使用PInvoke,我担心这些细节远远超出我的经验。
此Wrapper Library on CodeProject使用的AllocateAndGetTcpExTableFromStack仅适用于Windows XP和Server 2003.虽然抱歉,但仍然无法获得带宽。
我能找到的最接近的信息(对于Vista / Server 2008或更新版本)是pinvoke.net上GetExtendedTcpTable的一个例子。
工具PInvoke Interop Assistant可能有助于确定如何调用非托管代码。
如果我继续尝试这个,我会试着弄清楚以下内容: