You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#排序算法计时图表展示问题:时间精度与可视化适配

排序算法计时与图表展示问题解决方案

问题背景

在C#中对插入排序、归并排序、堆排序等多种排序方法的运行时间进行计时,并通过图表对比结果。当前使用以下代码计时:

DateTime utc3 = DateTime.UtcNow;
SortArray(mergeSortArray, 0, mergeSortArray.Length-1);
DateTime utc4 = DateTime.UtcNow;
TimeSpan Time2 = utc4 - utc3;
DateTime chartTime3 = Convert.ToDateTime(Time3.ToString());

由于图表函数不支持TimeSpan类型,不得不转换为DateTime类型展示,但出现以下问题:

  • 处理100/1000条小数据量时,时间如00:00:00.054209在图表中显示为54209(毫秒级数值),导致耗时5秒的排序条形极小,零点几秒的条形异常巨大,比例完全失调。
  • 尝试使用Time3.Seconds.ToString()时,标签显示为0,图表效果仍未改善;转换DateTime时用Time.Seconds也无效。

解决方案

1. 替换计时方式:使用Stopwatch(更精准且易用)

DateTime.UtcNow的精度有限,对于短时间运算(如小数据量排序)计时不够准确,改用System.Diagnostics.Stopwatch是更合适的选择,它专门用于代码计时,精度可达纳秒级:

using System.Diagnostics;

// 初始化并启动计时器
Stopwatch stopwatch = Stopwatch.StartNew();
// 执行排序
SortArray(mergeSortArray, 0, mergeSortArray.Length - 1);
// 停止计时
stopwatch.Stop();
// 获取总秒数(小数形式,比如0.054209秒)
double elapsedTotalSeconds = stopwatch.Elapsed.TotalSeconds;
// 或者获取总毫秒数(比如54.209毫秒)
double elapsedTotalMilliseconds = stopwatch.Elapsed.TotalMilliseconds;

2. 直接使用数值类型作为图表输入

图表不需要DateTime或TimeSpan类型,只需要代表时间长度的数值。直接用TotalSeconds或TotalMilliseconds得到的小数数值,就能让图表按真实比例展示耗时:

  • 如果排序耗时跨度大(从零点几秒到几秒),用TotalSeconds作为Y轴数据,条形高度会按真实比例呈现;
  • 如果都是毫秒级的短耗时,用TotalMilliseconds更直观。

3. 调整图表的标签与轴设置

  • 将图表的Y轴设置为数值轴(而非日期时间轴);
  • 数据绑定使用计算好的elapsedTotalSeconds或elapsedTotalMilliseconds;
  • 标签可以格式化显示,比如将数值转为"0.000s"或"0.0ms"格式,既保证图表比例正确,又让用户能直观读取时间:
    // 示例:格式化标签为带单位的字符串
    string timeLabel = $"{elapsedTotalSeconds:F3}s"; // 显示为"0.054s"
    

关键思路总结

不需要将时间转换为DateTime——图表需要的是时间长度的量化值,而非时间点。通过Stopwatch获取精确的总秒数/总毫秒数,直接作为数值传入图表,就能解决比例失调的问题,同时保证计时的准确性。

内容的提问来源于stack exchange,提问作者Kathryn McMeen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:01:40