【问题标题】:Time slowed down using `S.D.Stopwatch` on Azure在 Azure 上使用“S.D.Stopwatch”减慢时间
【发布时间】:2013-12-09 10:49:19
【问题描述】:

我刚刚运行了一些代码来报告它在 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 条记录,使用 TextFieldParser 使用自定义 IDataReader 解析),
  4. 更新同一个表的列以设置一个共同的值,
  5. 重新启用空约束。

不多也不少;没有什么特别密集的事情,我认为该操作主要是网络绑定的。

知道为什么时间变慢了吗?

注意事项:

  • 有趣的是,必须增加批量插入和更新命令的超时时间(设置为五分钟)。我读到默认是30秒,比报的12秒多;因此,我得出结论,SqlClient 测量时间的方式不同。
  • 本地执行的报告似乎完全正确,尽管它始终更快(使用 LocalDB 为 4-6 秒),因此可能只是效果不明显。

【问题讨论】:

    标签: azure time azure-web-app-service time-measurement


    【解决方案1】:

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

    【讨论】:

    • 由于某种原因我完全错过了你的答案——谢谢,我刚刚测试过;我确实很糟糕。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多