【问题标题】:Code optimization: bandwidth monitor in c# issues代码优化:c# 中的带宽监视器问题
【发布时间】:2012-02-19 14:25:38
【问题描述】:

我的问题主要是关于代码优化(目前) 我创建了一个网络监视器来监视 PC 上的不同连接,我所做的是我在堆栈的第 3 级(网络级别)嗅探数据包,在捕获数据包后,我应该在每个连接的 UI,我目前正在做的是查看程序运行时每秒发送的总消耗带宽和总数据。这是那部分代码:

    temp= packet_rtxt.TextLength;
        tempdr = temp / 1024;
        dr_txt.Text=tempdr.ToString();
        totaldata = totaldata + temp;
        totaldatadisp = totaldata;
        packet_rtxt.Text = "";
        //unit
        if (totaldata < 10485760)
        {
            if (totaldata < 10240)
                unit.Text = "bytes";
            else
            {
                totaldatadisp = totaldatadisp / 1024;
                unit.Text = "KBs";
            }
        }
        else
        {
            totaldata = totaldatadisp / 1048576;
            unit.Text = "MBs";
        }
        test.Text = totaldatadisp.ToString();
        tds.Enabled = true;
    }

到目前为止,我所做的是将捕获的数据包写入富文本框中,获取该 rtxt 的长度并将其添加到总数据的计数器中,获取长度并将其用作数据速率,然后清除 rtxt 以获取下一位数据。 接收到的总数据部分工作正常,但是 BPs 部分对于少量数据工作正常,如果数据速率超过 10kbps(在我的电脑上),它就会变得疯狂 我应该尝试优化整个代码,还是有其他方法(请记住,我需要监控每个连接),还是我需要使用不同的 UI 控件? 我应该专注于优化还是使用新方法?

提前致谢

【问题讨论】:

  • 你在使用多线程吗?是 WPF 应用程序还是 WinForms?

标签: c# refactoring optimization bandwidth-throttling


【解决方案1】:

标准控件不适用于此类负载。您需要将数据的记录与数据的显示分开。

我只会每秒显示最后一个 10kb 的文本。您仍然可以将所有日志记录保存在某种数据结构中。但您不必将它们全部推送到 UI。

您也可以编写自己的文本显示控件,但这需要更多的工作。

【讨论】:

  • 我只是显示它,所以我可以使用 textbox.length 函数读取它的大小,我应该将它记录到文件中吗?然后计算那个文件的大小?
  • 你为什么不把它存储在一个字符串变量中?
  • 哇,我从来没有想过,这听起来是个好主意
  • 它肯定对处理器和内存更友好,但我的带宽计算器仍然无法工作
猜你喜欢
  • 1970-01-01
  • 2017-08-29
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
相关资源
最近更新 更多