在Azure上使用“S.D.Stopwatch”可以减慢时间

在Azure上使用“S.D.Stopwatch”可以减慢时间,azure,time,azure-web-app-service,time-measurement,Azure,Time,Azure Web App Service,Time Measurement,我刚刚在Azure网站实例上运行了一些报告其性能的代码;结果似乎有点不对劲。我重新运行了该操作,它看起来确实是一致的:System.Diagnostics.Stopwatch看到一个实际耗时超过三分钟(至少3m16s)的操作的执行时间为12秒 此过程在WCF数据服务“操作”的上下文中运行,并在SQL数据库中为测试数据种子(这不是生产代码)。具体而言,它: 打开与Azure SQL数据库的连接 禁用空约束 使用System.Data.SqlClient.SqlBulkCopy锁定空表,并使用缓冲流

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

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

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

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

    注:

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

    您使用stopwatch.appeased.Seconds获取总时间,但它是错误的。已用秒数是TimeSpan结构表示的时间间隔的秒数部分。请改用stopwatch.appeased.TotalSeconds。

    由于某种原因,我完全没有找到您的答案——谢谢,我刚刚测试了它;我真的很糟糕。
    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;