我有一个函数GetAlertData()返回一个数据表。我称之为:

var dt = GetAlertData()

调试模式下的行为:
案例1:当我一直执行F11并进入getAlertData函数时,一切正常,我得到了正确的表
案例2:当我对这个函数执行F10并跳过它时,getAlertData返回一个表,其中所有值都填充为零(不正确)。(表中的列都是float数据类型)
在释放模式下,行为与在调试模式下按F10相同,即再次得到所有的零。
有什么可能是原因的想法吗?或者我可以试着找出原因吗?谢谢。。
编辑:我的getAlertData函数是这样的..
internal static DataSet GetAlertData()
        {
            using (var sqlConnection = new SqlConnection(Constants.ConnectionString))
            {
                const string sproc = @"[spo_GetAlertData]";
                var cmd = new SqlCommand(sproc, sqlConnection) {CommandType = CommandType.StoredProcedure};

                cmd.Parameters.Add("@TimeWindow", SqlDbType.Int);
                cmd.Parameters["@TimeWindow"].Value =2
                cmd.Parameters.Add("@ThresholdTime", SqlDbType.Int);
                cmd.Parameters["@ThresholdTime"].Value = 2
                var dsAnalysis = new DataSet();
                var da = new SqlDataAdapter(cmd);
                da.Fill(dsAnalysis);
                if (dsAnalysis.Tables.Count > 0 && dsAnalysis.Tables[0].Rows.Count > 0)
                    return dsAnalysis;
                return null;
            }
        }

最佳答案

要考虑的一件事是使用f11和f10(分别使用单步执行和单步执行方法)的执行时间的差异。f11进入一个函数,因此使你在这个逻辑线程中的时间比f10长,f10的步骤超过了允许它全速执行的代码。
关键是,当应用程序有更多的处理时间时,您很可能会有一个计时/线程问题得到缓解,这是由于您要花更多的时间使用f11遍历和进入代码。这就是为什么发布的更多行为与f10行为匹配,执行速度更快。
我想在问题区域周围喷洒类似Thread.Sleep(250)的东西也会有帮助,但我不建议这样做。这是一个绝对不得已的行动,最好用来测试时机假设。你需要弄清楚什么是并发运行的,可能会导致这种情况。

09-25 20:33