2017-09-20 22 views
5

有沒有辦法找出.Net Core 2.0上的網絡成本?
這是我獲得的網絡開銷我的C++代碼:在.Net Core 2.0上獲得網絡成本的最佳方法

hr = pNetworkCostManager->GetCost(&dwCost, NULL); 
if (hr == S_OK) { 
    switch (dwCost) { 
    case NLM_CONNECTION_COST_UNRESTRICTED: 
    case NLM_CONNECTION_COST_FIXED:   
    case NLM_CONNECTION_COST_VARIABLE:  
    case NLM_CONNECTION_COST_OVERDATALIMIT: 
    case NLM_CONNECTION_COST_CONGESTED:  
    case NLM_CONNECTION_COST_ROAMING:  
    case NLM_CONNECTION_COST_APPROACHINGDATALIMIT: 
    case NLM_CONNECTION_COST_UNKNOWN: 
    } 
} 

一兩件事,對.NET核心(2.0)具有被NetworkInterfaceType(https://docs.microsoft.com/en-us/dotnet/api/system.net.networkinformation.networkinterfacetype?view=netcore-1.0

基礎上NetworkInterfaceType如果我能看到有無線,網絡或移動連接,但不會轉化爲成本。
有沒有辦法找出.Net Core 2.0上的網絡成本?

+0

在您的C++示例中,「pNetworkCostManager」來自哪裏? – Gimly

+0

@你好,它是一個https://msdn.microsoft.com/en-us/library/windows/desktop/hh448257(v=vs.85).aspx對象 – Mark

+0

你想確定測量與無限使用(即錢)?或者,你是否試圖確定性能(速度比特/秒)? –

回答

3

要撥打GetCost,您將不得不使用COM接口。如果您需要完成此調用,即將NULL而不是IP地址傳入GetCost,則您必須自行定義COM接口以滿足您的需求,例如,像這樣:

using System; 
using System.Runtime.CompilerServices; 
using System.Runtime.InteropServices; 

[ComImport, Guid("DCB00C01-570F-4A9B-8D69-199FDBA5723B"), ClassInterface(ClassInterfaceType.None)] 
public class NetworkListManager : INetworkCostManager 
{ 
    [MethodImpl(MethodImplOptions.InternalCall)] 
    public virtual extern void GetCost(out uint pCost, [In] IntPtr pDestIPAddr); 
} 


[ComImport, Guid("DCB00008-570F-4A9B-8D69-199FDBA5723B"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
public interface INetworkCostManager 
{ 
    void GetCost(out uint pCost, [In] IntPtr pDestIPAddr); 
} 

然後你就可以得到這樣的成本信息:

new NetworkListManager().GetCost(out uint cost, IntPtr.Zero); 

如果你沒有通過NULLGetCost的要求,你可以參考簡單地添加到COM類型庫「網絡列表管理器1.0類型庫」,將「嵌入互操作類型」設置爲falseuse those definitions

相關問題