【发布时间】:2015-02-15 08:01:17
【问题描述】:
我想做以下事情:
- 我的应用程序在 Windows 机器上运行(称为应用程序 A)。
- 我可以修改应用 A 的源代码来引入带宽限制。
- 我希望能够重用我的带宽限制代码并将其放入我拥有的任何其他应用程序中(换句话说,我想尝试在应用程序域级别限制带宽,以便不必重构现有应用程序以进行带宽限制)。
- 我想分别限制A的累计上传和下载速度。例如,如果 A 分配给上传的最大流量为 5 Kbps,则 A 的所有上传流的累计上限为 5 Kbps。
我的要求:
- 我无法使用内核模式驱动程序。
- 我需要在应用程序域级别添加限制。
我曾尝试对此进行研究,尤其是在 Stack Overflow 上,但找不到任何对我的案例有用的东西:
- 我已经看到this example 在 Stream 对象周围使用 ThrottledStream 类包装器,该类包装器在使用时会引入节流,但我需要在域级别进行;采用这种方法是有问题的,因为它需要我在其他应用程序中重构大量现有代码。
- 我见过this question,他的回答谈到了使用 Windows 过滤平台 API。不幸的是,我的一个要求是我绝对不能使用内核模式驱动程序来完成此任务,我的理解是 WFP API 需要一个。
有谁知道一种方法来实现我的特定带宽限制要求,以便在应用程序域级别限制应用程序?
【问题讨论】:
-
我不确定这与stackoverflow.com/questions/27512920/… 有何不同,但您声称它们是...另一方面,两者看起来都像“搜索工具/库”,因此可能会分别关闭.
-
请注意,.Net Framework 中没有内置这样的 API,因此您真的很喜欢搜索库。
-
@AlexeiLevenkov 另一个人无权访问应用程序 A 的源代码,因此它永远不会在应用程序域级别引入限制。不过,谢天谢地,自从我写这篇文章以来,我的要求发生了变化!
-
@AlexeiLevenkov QoS API 怎么样?我知道基于策略的 QoS 可以做到这一点(technet.microsoft.com/en-us/library/dd919203%28v=ws.10%29.aspx)并且 QoS 有自己的 API。该 API 可以与策略相同吗?我猜如果没有,仍然可以编写一些代码来创建此类策略。
-
PeakBandwidth (msdn.microsoft.com/en-us/library/windows/desktop/…) 应该是我需要的。它是给定流的基于时间的传输权限上限,以每秒字节数为单位。 当调用 WSCInstallQOSTemplate (msdn.microsoft.com/en-us/library/windows/desktop/…) 时,此 FLOWSPEC 是通过 QOS 结构 (msdn.microsoft.com/en-us/library/windows/desktop/…) 传入的
标签: c# c++ .net traffic bandwidth-throttling