浏览代码

完善udp包的统计(基于socket bind的流量监控误差确实很大)

yuzhengyang 8 年之前
父节点
当前提交
445c7d84e8
共有 2 个文件被更改,包括 24 次插入10 次删除
  1. 22 7
      Fork.Net/Oreo.PCMonitor/Services/NetFlowService.cs
  2. 2 3
      Fork.Net/Oreo.PCMonitor/Views/NetDetailForm.cs

+ 22 - 7
Fork.Net/Oreo.PCMonitor/Services/NetFlowService.cs

@@ -110,6 +110,7 @@ namespace Oreo.PCMonitor.Services
                             {
                                 isGather = true;
                                 info.DownloadBag += packet.TotalLength;
+                                info.DownloadBagCount += packet.TotalLength;
                             }
                         }
                     }
@@ -125,6 +126,7 @@ namespace Oreo.PCMonitor.Services
                             {
                                 isGather = true;
                                 info.UploadBag += packet.TotalLength;
+                                info.UploadBagCount += packet.TotalLength;
                             }
                         }
                     }
@@ -148,6 +150,7 @@ namespace Oreo.PCMonitor.Services
                             {
                                 isGather = true;
                                 info.DownloadBag += packet.TotalLength;
+                                info.DownloadBagCount += packet.TotalLength;
                                 if (info.ProcessName == "Idle")
                                 {
 
@@ -168,6 +171,7 @@ namespace Oreo.PCMonitor.Services
                             {
                                 isGather = true;
                                 info.UploadBag += packet.TotalLength;
+                                info.UploadBagCount += packet.TotalLength;
                                 if (info.ProcessName == "Idle")
                                 {
 
@@ -178,7 +182,10 @@ namespace Oreo.PCMonitor.Services
                 }
             }
             #endregion
-            if (!isGather) LostPacketCount++;
+            if (!isGather)
+            {
+                LostPacketCount++;
+            }
         }
 
         #region 获取当前程序的所有连接
@@ -259,17 +266,25 @@ namespace Oreo.PCMonitor.Services
                     p.DownloadDataCount += p.DownloadData;
                 });
 
+                int allupbag = NetProcessInfoList.Sum(x => x.UploadBag);
+                int alldownbag = NetProcessInfoList.Sum(x => x.DownloadBag);
+
                 NetProcessInfoList.ForEach(p =>
                 {
-                    p.LastUpdateTime = DateTime.Now;
-                    p.UploadData = (int)((float)p.UploadBag / (NetProcessInfoList.Sum(x => x.UploadBag) + 0.01) * NetFlow.UploadData);
-                    p.DownloadData = (int)((float)p.DownloadBag / (NetProcessInfoList.Sum(x => x.DownloadBag + 0.01)) * NetFlow.DownloadData);
-
-                    p.UploadBagCount += p.UploadBag;
-                    p.DownloadBagCount += p.DownloadBag;
+                    if (allupbag > 0 && NetFlow.UploadData > 0)
+                    {
+                        float uprate = (float)p.UploadBag / allupbag;
+                        p.UploadData = (int)(uprate * NetFlow.UploadData);
+                    }
+                    if (alldownbag > 0 && NetFlow.DownloadData > 0)
+                    {
+                        float downrate = (float)p.DownloadBag / alldownbag;
+                        p.DownloadData = (int)(downrate * NetFlow.DownloadData);
+                    }
 
                     p.UploadBag = 0;
                     p.DownloadBag = 0;
+                    p.LastUpdateTime = DateTime.Now;
                 });
             }
         }

+ 2 - 3
Fork.Net/Oreo.PCMonitor/Views/NetDetailForm.cs

@@ -59,8 +59,7 @@ namespace Oreo.PCMonitor.Views
                                 r.Cells["CoUpload"].Value = ByteConvertTool.Fmt(p.UploadData);
                                 r.Cells["CoDownloadCount"].Value = ByteConvertTool.Fmt(p.DownloadDataCount);
                                 r.Cells["CoUploadCount"].Value = ByteConvertTool.Fmt(p.UploadDataCount);
-                                //r.Cells["CoConnectionCount"].Value = p.ConnectCount;
-                                r.Cells["CoConnectionCount"].Value = p.DownloadBagCount;
+                                r.Cells["CoConnectionCount"].Value = p.ConnectCount;
                             }
                         }
                         if (!isUpdate)
@@ -69,7 +68,7 @@ namespace Oreo.PCMonitor.Views
                                 p.ProcessIcon,p.ProcessName,
                                 ByteConvertTool.Fmt(p.DownloadData),ByteConvertTool.Fmt(p.UploadData),
                                 ByteConvertTool.Fmt(p.DownloadDataCount),ByteConvertTool.Fmt(p.UploadDataCount),
-                                p.ConnectCount});
+                               p.DownloadBagCount});
                         }
                     });
                 }