Ejemplo n.º 1
0
        private int 批量增加GPS(ref string __当前表)
        {
            var   __上报数据列表 = new List <M号码位置>();
            M号码位置 __上报数据;

            //while ((_上报数据列表.TryTake(out __上报数据) || _上报数据列表.IsAddingCompleted) && !_上报数据列表.IsCompleted)
            while (_数据缓存.TryTake(out __上报数据))
            {
                __上报数据列表.Add(__上报数据);
            }
            if (__上报数据列表.Count == 0)
            {
                return(0);
            }
            foreach (var __分组 in __上报数据列表.GroupBy(x => x.GPS.时间.Date))
            {
                var __表名 = _表前缀 + __分组.Key.ToString("yyyyMMdd");
                if (__当前表 != __表名)
                {
                    var __sql = string.Format(_建一天位置表, __表名);
                    Let.Us.Retry(1000, 100, null, exs => H调试.记录致命("建一天位置表失败:" + exs.Last().Message)).Do(() =>
                    {
                        using (var __连接 = new SqlConnection(_连接字符串))
                        {
                            SQLHelper.ExecuteNonQuery(__连接, __sql);
                        }
                    });
                    __当前表 = __表名;
                }
                批量增加(__表名, __上报数据列表);
            }
            return(__上报数据列表.Count);
        }
Ejemplo n.º 2
0
        public DGPS数据()
        {
            _连接字符串 = new SqlConnectionStringBuilder
            {
                DataSource         = H程序配置.获取字符串("数据库地址"),
                UserID             = H程序配置.获取字符串("数据库账号"),
                Password           = H程序配置.获取字符串("数据库密码"),
                InitialCatalog     = H程序配置.获取字符串("数据库名称"),
                IntegratedSecurity = false,
                UserInstance       = false,
            }.ToString();

            Let.Us.Retry(1000, 100, null, exs => H调试.记录致命("建最后位置表失败:" + exs.Last().Message)).Do(() =>
            {
                using (var __连接 = new SqlConnection(_连接字符串))
                {
                    SQLHelper.ExecuteNonQuery(__连接, _建最后位置表);
                }
            });
            DataTable __位置表;
            Dictionary <int, DataRow> __位置映射;

            _最后位置 = 查询最后位置(out __位置表, out __位置映射);

            Task.Factory.StartNew(() =>
            {
                var __当前表 = "";
                while (true)
                {
                    var __更新数量 = 0;
                    Let.Us.DoAndSleep(_批量增加GPS频率, __耗时 => H调试.记录(string.Format("批量增加GPS {1} 条, 耗时 {0} 毫秒", __耗时, __更新数量)))
                    .Do(() => __更新数量 = 批量增加GPS(ref __当前表));
                }
            });

            Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    var __更新数量 = 0;
                    Let.Us.DoAndSleep(_批量更新最后GPS频率, __耗时 => H调试.记录(string.Format("批量更新最后GPS {1} 条, 耗时 {0} 毫秒", __耗时, __更新数量)))
                    .Do(() => { __更新数量 = 批量更新最后GPS(__位置表, __位置映射); });

                    //var __秒表 = new Stopwatch();
                    //__秒表.Start();
                    //var __更新数量 = 批量更新最后GPS(__位置表, __位置映射);
                    //__秒表.Stop();
                    //H调试.记录(string.Format("批量更新最后GPS {1} 耗时 {0} 毫秒", __秒表.Elapsed.TotalMilliseconds, __更新数量));
                    //var __休眠 = _批量更新最后GPS频率 - (int)__秒表.Elapsed.TotalMilliseconds;
                    //if (__休眠 > 0)
                    //{
                    //    Thread.Sleep(__休眠);
                    //}
                }
            });
        }
Ejemplo n.º 3
0
        /// <summary>
        /// EXCEPTION_EXECUTE_HANDLER == 1 表示我已经处理了异常,可以优雅地结束了
        /// EXCEPTION_CONTINUE_SEARCH == 0 表示我不处理,其他人来吧,于是windows调用默认的处理程序显示一个错误框,并结束
        /// EXCEPTION_CONTINUE_EXECUTION e== -1 表示错误已经被修复,请从异常发生处继续执行。
        /// </summary>
        /// <param name="a"></param>
        /// <returns></returns>
        private static Int32 最后处理异常(ref long a)
        {
            var __文件名 = "未处理异常";

            if (!_获取是否DotNet异常())
            {
                H调试.记录致命("!!!跨平台(P/INVOKE)调用异常 !!!");
                __文件名 = "跨平台调用异常";
            }
            __文件名 += DateTime.Now.ToString("yyyy年MM月dd日 HH时mm分ss秒");
            记录(string.Format("{0}\\{1}.dmp", H调试.日志目录, __文件名));
            H调试.截屏(__文件名);
            return(1);
        }
Ejemplo n.º 4
0
        private int 批量增加GPS(ref string __当前表)
        {
            var   __上报数据列表 = new List <M号码位置>();
            M号码位置 __上报数据;

            //while ((_上报数据列表.TryTake(out __上报数据) || _上报数据列表.IsAddingCompleted) && !_上报数据列表.IsCompleted)
            while (_数据缓存.TryTake(out __上报数据))
            {
                __上报数据列表.Add(__上报数据);
            }
            foreach (var __分组 in __上报数据列表.GroupBy(x => x.GPS.时间.Date))
            {
                var __表名 = _表前缀 + __分组.Key.ToString("yyyyMMdd");
                if (__当前表 != __表名)
                {
                    var __sql = string.Format(_建一天位置表, __表名);
                    Let.Us.Retry(1000, 100, null, exs => H调试.记录致命("建一天位置表失败:" + exs.Last().Message)).Do(() =>
                    {
                        using (var __连接 = new SqlConnection(_连接字符串))
                        {
                            SQLHelper.ExecuteNonQuery(__连接, __sql);
                        }
                    });
                    __当前表 = __表名;
                }
                var _一天位置表 = new DataTable();
                _一天位置表.Columns.AddRange(new[]
                {
                    new DataColumn("号码", typeof(int)),
                    new DataColumn("时间", typeof(DateTime)),
                    new DataColumn("经度", typeof(decimal)),
                    new DataColumn("纬度", typeof(decimal)),
                    new DataColumn("高度", typeof(short)),
                    new DataColumn("速度", typeof(short)),
                    new DataColumn("方向", typeof(short)),
                    new DataColumn("精度", typeof(short)),
                });
                __上报数据列表.ForEach(__数据 =>
                {
                    var __行 = _一天位置表.NewRow();
                    设置行(__行, __数据.号码, __数据.GPS);
                    _一天位置表.Rows.Add(__行);
                });

                using (var __批量复制 = new SqlBulkCopy(_连接字符串 /*, SqlBulkCopyOptions.TableLock*/))
                {
                    __批量复制.BatchSize            = 500;
                    __批量复制.DestinationTableName = __表名;
                    __批量复制.ColumnMappings.Add("号码", "号码");
                    __批量复制.ColumnMappings.Add("时间", "时间");
                    __批量复制.ColumnMappings.Add("经度", "经度");
                    __批量复制.ColumnMappings.Add("纬度", "纬度");
                    __批量复制.ColumnMappings.Add("高度", "高度");
                    __批量复制.ColumnMappings.Add("速度", "速度");
                    __批量复制.ColumnMappings.Add("方向", "方向");
                    __批量复制.ColumnMappings.Add("精度", "精度");
                    __批量复制.WriteToServer(_一天位置表);
                }
            }
            return(__上报数据列表.Count);
        }
Ejemplo n.º 5
0
        public DGPS数据()
        {
            _连接字符串 = new SqlConnectionStringBuilder
            {
                DataSource         = H程序配置.获取字符串("数据库地址"),
                UserID             = H程序配置.获取字符串("数据库账号"),
                Password           = H程序配置.获取字符串("数据库密码"),
                InitialCatalog     = H程序配置.获取字符串("数据库名称"),
                IntegratedSecurity = false,
                UserInstance       = false,
            }.ToString();

            Let.Us.Retry(1000, 100, null, exs => H调试.记录致命("建最后位置表失败:" + exs.Last().Message)).Do(() =>
            {
                using (var __连接 = new SqlConnection(_连接字符串))
                {
                    SQLHelper.ExecuteNonQuery(__连接, _建最后位置表);
                }
            });

            _最后位置 = 查询最后位置();
            Task.Factory.StartNew(() =>
            {
                var __当前表 = "";
                while (true)
                {
                    try
                    {
                        var __更新数量 = 0;
                        Let.Us.DelayAfter(_批量增加GPS频率, __耗时 =>
                        {
                            if (__耗时 > 1000)
                            {
                                H调试.记录(string.Format("批量增加GPS {1} 条, 耗时 {0} 毫秒", __耗时, __更新数量));
                            }
                        })
                        .Do(() => __更新数量 = 批量增加GPS(ref __当前表));
                    }
                    catch (Exception ex)
                    {
                        H调试.记录异常(ex);
                    }
                }
            });

            Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    try
                    {
                        var __更新数量 = 0;
                        Let.Us.DelayAfter(_批量更新最后GPS频率, __耗时 =>
                        {
                            if (__耗时 > 1000)
                            {
                                H调试.记录(string.Format("批量更新最后GPS {1} 条, 耗时 {0} 毫秒", __耗时, __更新数量));
                            }
                        })
                        .Do(() => { __更新数量 = 批量更新最后GPS(); });
                    }
                    catch (Exception ex)
                    {
                        H调试.记录异常(ex);
                    }
                }
            });
        }