使用Azure上的`S.D.Stopwatch`减慢时间

时间:2013-12-09 10:49:20

标签: azure time azure-web-sites time-measurement

我刚刚运行了一些在Azure网站实例上报告其性能的代码;结果似乎有点偏。我重新运行了这个操作,看起来确实一致:System.Diagnostics.Stopwatch执行时间为 12秒,实际操作时间超过分钟 (至少3分16秒)。

Debug.WriteLine("Loading dataset in database ...");
var stopwatch = new Stopwatch();
stopwatch.Start();
ProcessDataset(CurrentDataSource.Database.Connection as SqlConnection, parser);
stopwatch.Stop();
Debug.WriteLine("Dataset loaded in database ({0}s)", stopwatch.Elapsed.Seconds);
return (short)stopwatch.Elapsed.Seconds;

此过程在WCF数据服务“操作”的上下文中运行,并在SQL数据库中生成测试数据(这不是生产代码)。具体来说,它:

  1. 打开与Azure SQL数据库的连接,
  2. 禁用空约束,
  3. 使用System.Data.SqlClient.SqlBulkCopy锁定空表并使用缓冲流加载它,该缓冲流通过文件系统从Azure Blob存储中检索数据集(2.4MB),对其进行解压缩(GZip,4.9MB膨胀)并对其进行解析( CSV,349996条记录,使用IDataReader自定义TextFieldParser进行解析,
  4. 更新同一个表的列以设置公共值
  5. 重新启用空约束。
  6. 不少,不多;没有什么特别密集的事情,我认为这个操作主要是网络限制的。

    知道时间减慢的原因吗?

    注意:

    • 有趣的是,必须增加批量插入和更新命令的超时(设置为五分钟)。我读到默认值为30秒,超过报告的12秒;因此,我的结论是SqlClient以不同的方式衡量时间。
    • 来自本地执行的报告似乎完全正确,虽然它一直更快(使用LocalDB 4-6秒)所以可能只是效果不明显。

1 个答案:

答案 0 :(得分:2)

您使用了stopwatch.Elapsed.Seconds来获取总时间,但这是错误的。 Elapsed.Seconds是TimeSpan结构表示的时间间隔的秒分量。请尝试使用stopwatch.Elapsed.TotalSeconds。