问题解决:无法获取本地变量或参数的值,因为它在此指令指针中不可用,可能是因为它已经被优化掉了。

版权声明:此博客上带有原创标识的文章、图片、文件等,未经本人允许,不得用于商业用途。网络媒体、传统媒体或个人转载请注明出处和链接,否则属于侵权行为。 https://blog.csdn.net/nny886/article/details/85110834

本人遇到的这个问题是使用迭代程序造成内存泄漏(批量转换时,在数据量较小时无问题,超过一定数量就崩溃),将其改成循环程序解决!实例如下:
递归算法:

public  double GetBottomLatitude(double Bf0, double x, double a, double f, double[] gaussCoefficient) {
            double e1Square = 2 * f - f * f;// first eccentricity square
            double FB0 = a * (1 - e1Square) * (gaussCoefficient[0] * Bf0 - gaussCoefficient[1] * Math.Sin(2 * Bf0) + gaussCoefficient[2] * Math.Sin(4 * Bf0) - gaussCoefficient[3] * Math.Sin(6 * Bf0) + gaussCoefficient[4] * Math.Sin(8 * Bf0) - gaussCoefficient[5] * Math.Sin(10 * Bf0) + gaussCoefficient[6] * Math.Sin(12 * Bf0));
            double FB1 = a * (1 - e1Square) * (gaussCoefficient[0] - 2 * gaussCoefficient[1] * Math.Cos(2 * Bf0) + 4 * gaussCoefficient[2] * Math.Cos(4 * Bf0) - 6 * gaussCoefficient[3] * Math.Cos(6 * Bf0) + 8 * gaussCoefficient[4] * Math.Cos(8 * Bf0) - 10 * gaussCoefficient[5] * Math.Cos(10 * Bf0) + 12 * gaussCoefficient[6] * Math.Cos(12 * Bf0));
            double Bf1 = Bf0 + (x - FB0) / FB1;
            if (Math.Abs(Bf0 - Bf1) < 0.00000000000005) {
                return Bf1;
            } else {
                return GetBottomLatitude(Bf1, x, a, f, gaussCoefficient);
            }
        }

循环算法:

public  double GetBottomLatitude(double Bf0, double x, double a, double f, double[] gaussCoefficient) {
            double e1Square = 2 * f - f * f;// first eccentricity square
            double FB0 = a * (1 - e1Square) * (gaussCoefficient[0] * Bf0 - gaussCoefficient[1] * Math.Sin(2 * Bf0) + gaussCoefficient[2] * Math.Sin(4 * Bf0) - gaussCoefficient[3] * Math.Sin(6 * Bf0) + gaussCoefficient[4] * Math.Sin(8 * Bf0) - gaussCoefficient[5] * Math.Sin(10 * Bf0) + gaussCoefficient[6] * Math.Sin(12 * Bf0));
            double FB1 = a * (1 - e1Square) * (gaussCoefficient[0] - 2 * gaussCoefficient[1] * Math.Cos(2 * Bf0) + 4 * gaussCoefficient[2] * Math.Cos(4 * Bf0) - 6 * gaussCoefficient[3] * Math.Cos(6 * Bf0) + 8 * gaussCoefficient[4] * Math.Cos(8 * Bf0) - 10 * gaussCoefficient[5] * Math.Cos(10 * Bf0) + 12 * gaussCoefficient[6] * Math.Cos(12 * Bf0));
            double Bf1 = Bf0 + (x - FB0) / FB1;
            while (Math.Abs(Bf0 - Bf1) >0.00000000000005)
            {
                Bf0 = Bf1;
                FB0 = a * (1 - e1Square) * (gaussCoefficient[0] * Bf0 - gaussCoefficient[1] * Math.Sin(2 * Bf0) + gaussCoefficient[2] * Math.Sin(4 * Bf0) - gaussCoefficient[3] * Math.Sin(6 * Bf0) + gaussCoefficient[4] * Math.Sin(8 * Bf0) - gaussCoefficient[5] * Math.Sin(10 * Bf0) + gaussCoefficient[6] * Math.Sin(12 * Bf0));
                FB1 = a * (1 - e1Square) * (gaussCoefficient[0] - 2 * gaussCoefficient[1] * Math.Cos(2 * Bf0) + 4 * gaussCoefficient[2] * Math.Cos(4 * Bf0) - 6 * gaussCoefficient[3] * Math.Cos(6 * Bf0) + 8 * gaussCoefficient[4] * Math.Cos(8 * Bf0) - 10 * gaussCoefficient[5] * Math.Cos(10 * Bf0) + 12 * gaussCoefficient[6] * Math.Cos(12 * Bf0));
                Bf1 = Bf0 + (x - FB0) / FB1;
            }
            return Bf1;
        }

猜你喜欢

转载自blog.csdn.net/nny886/article/details/85110834