DBImport V3.7版本发布及软件稳定性(自动退出问题)解决过程分享

DBImport V3.7介绍:

1:先上图,再介绍亮点功能:

主要的升级功能为:

1:增加(Truncate Table)清表再插入功能:

清掉再插,可以保证两个库的数据一致,自己很喜欢这个功能。

2:信息栏增加红色部分:

黑色的信息太多,有时候错误信息被淹陌,分拆出来单独红色块标识错误信息,清晰一些。

3:增加保存所有的配置及配置还原:

之前只保存数据库链接的配置,为了第4点,包起了所有的配置,包括表名等。

4:增加自启动参数,用于定时功能的开机启动:

自启动参数为 - true 或 - 1,下一版本会处理成服务,支持重启电脑后继续服务。

5:解决软件稳定性(自动退出)问题。

下载地址:点击下载

下面重点介绍解决问题的过程:

记得我发布ASP.NET Aries框架的时候,有个演示地址:http://aries.cyqdata.com 。

由于总有个人别删除用户或数据或修改登陆密码,为了防止此种情况:

我把DBImport放到服务器,同时开启了定时功能,以为可以一劳永逸了。

结果软件运行运行着,就自动退出了,然后又得手工执行一次。

所以目前在执行的方案,锁定了文件的只读属性,来避免用户修改数据。

今天刚好想起来,于是就想到要解决它了,于是就有了以下的内容:

解决的过程:

1:先确认情况:

单独运行软件,开启定时功能,然后出去溜达一圈,回头再看结果:

多次确认后,而且问题不单纯:

A:卡住没反应。

B:抛异常定义到Application.Run(单独运行时表现直接退出软件)。

2:通过IntelliTrace查看异常:

开启了”IntelliTrace事件和调用信息“:

F5运行,抛:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”。

我以为找到问题,结果是掉坑里。

1:当一个方法返回数组T[] GetList()时,抛这个异常。

2:当Dictionary添加一个数组Add(key,T[])时,抛这个异常。

3:当方法的参数为:public MDataTable Select(params object[] selectColumns) 这种数组时,抛这个异常。

好吧,这数组是哪里得罪了微软,要被它这么欺负。

改了半天代码,把T[]数组的代码全改成List<T>,一般又一步,走向正常运行。

后来没折了,毕竟有些公开的方法有params参数不好改,只好把选项改成“仅IntelliTrace事件”。

运行,等出Bug后,点一下全部中断:

然后就可以看到执行的事件了:

结合着自己记录的错误信息:

回头审了一下代码,终于发现一个Bug:

                if (isGoOn)
                {
                    using (SqlBulkCopy sbc = new SqlBulkCopy(con, (keepID ? SqlBulkCopyOptions.KeepIdentity : SqlBulkCopyOptions.Default) | SqlBulkCopyOptions.FireTriggers, sqlTran))
                    {
                        sbc.BatchSize = 100000;
                        sbc.DestinationTableName = SqlFormat.Keyword(mdt.TableName, DalType.MsSql);
                        sbc.BulkCopyTimeout = AppConfig.DB.CommandTimeout;
                        foreach (MCellStruct column in mdt.Columns)
                        {
                            sbc.ColumnMappings.Add(column.ColumnName, column.ColumnName);
                        }
                        sbc.WriteToServer(mdt);
                    }
                }
                if (_dalHelper == null)
                {
                    con.Close();
                    con = null;
                }
                else if (isCreateDal)
                {
                    _dalHelper.EndTransaction();
                    _dalHelper.Dispose();
                }

这段代码,在异常的时候,链接关闭不了,重点它还是开了事务的,没想到都老江湖了,百密还是有一输。

于是运行久了,连接池耗尽,加上事务卡死双重打击,界面就进入长时间卡死不动了

找到问题修正就好了,关闭链接的放到Try的finally去:

finally
            {
                if (_dalHelper == null)
                {
                    con.Close();
                    con = null;
                }
                else if (isCreateDal)
                {
                    _dalHelper.EndTransaction();
                    _dalHelper.Dispose();
                }
}

第2个问题:自动退出的问题,有过经验。

毕竟当年创业写微博粉丝精灵的时候,就遇到过了:

对于Winform软件,不要在线程里操作UI,不要相信:StartForm.CheckForIllegalCrossThreadCalls = false;

于是,把所有的代码都改成主线程委托调用的方式,类似以下代码:

private delegate void SetTextHandle(string id, string value);

        private void ThreadSetText(string id, string value)
        {
            this.Controls.Find(id, true)[0].Text = value;
        }
        private void SetText(string id, string value)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new SetTextHandle(ThreadSetText), new object[] { id, value });
            }
            else
            {
                ThreadSetText(id, value);
            }
        }

好了,至此,稳定性的问题解决了,周末愉快!

时间: 2024-07-28 16:58:43

DBImport V3.7版本发布及软件稳定性(自动退出问题)解决过程分享的相关文章

DBImport v3.3 中文版发布:数据库数据互导及文档生成工具(IT人员必备)

前言: 好久没写文了, 距离上一篇文章是3个月前的事了,虽然工作很忙,主要还是缺少写作的内容和激情,所以没怎么动手. 之前有一个来月不断面试不同层次来应聘的人员,很有想写文的冲动,后来还是忍住了. 估计写了也是那种说人坏话.恨铁不成钢的情绪文,没啥营养,所以情绪过了就没想写了. 在公司除了管理上的事情之外,另外也研发了一套适用信息系统的快速开发框架,这个有机会再写写文和大伙分享了. 下面言归正文了. 背景: 关于这个DBImport工具,发布的版本不多,仅有:V1.0.V2.0.V3.0.V3.

DBImport v3.44 中文版发布:数据库数据互导及文档生成工具(IT人员必备)

前言: 距离上一个版本V3.3版本的文章发布,已经是1年10个月前的事了. 其实版本一直在更新,但也没什么大的功能更新,总体比较稳定,所以也不怎么写文介绍了. 至于工作上的事,之前有半年时间跑去学英语.考驾照.到健身房请私教,远离了一下代码的世界,现在又回归了. 最近上班了,新的公司需要招.NET系.产品经理,有兴趣的可以左侧扣我(我部门要人,地点广州). 另外:阿里最近收购了一家公司,也需要Java系的高手和测试人员,有兴起的也可以扣我(我朋友的部门要人,地点广州). 嗯,闲话少说,看看工具的

DBImport v3.5 中文版发布:数据库定时同步及文档生成工具(IT人员必备)

前言: 趁着最近的休息时间,只能多勤快些:多写代码,多更新文章. 因为一旦投入新的工作,估计博客又会恢复到一年才产几篇的状态. 对于DBImport,因为用户的意见,增加了一个亮点功能,让软件B格升为数据库时时同步工具,所以值的介绍一下. 相比上一版本的主要功能更新: 1:优化MySql的导入效率. 2:增加定时功能(B格提升到时时数据同步功能). 3:优化导出的表脚本和数据脚本. 4:从.NET 2.0 升级编绎成.NET 4.0 版本:(主要是为了支持Oracle:Oracle.Manage

JIRA Servcie Desk v3.2版本发布,新增多个实用功能

点击立即下载JIRA Service Desk最新版试用! 更多关于项目管理的相关资讯请猛戳>>这里<<! 新增工作流程审批 现可添加一个对工作流的审批步骤,客户可以选择审批人员的请求.例如,一个客户提交了一个新的笔记本电脑购买申请,那么他可能需要经过管理者的审批来批准购买. 过渡门户网站请求 可以让客户从门户网站解决.重新打开或者执行另一个转换链接.例如,如果一个代练和客户共享一个有帮助的知识库文章,客户可以自己找到解决方案并回复请求. 静默通知 如果你的客户想要安静的接受通知,

ERP系统31.84版本发布,7大新功能轻松解决管理难题

仅隔2周,智邦国际再次迎来更新,版本从31.83升级为31.84.这是一个时刻在被技术颠覆的时代,不断改写市场.行业.客户规则,面对来自内外的各种挑战,是以开挂般的速度开疆拓土,还是继续用传统管理负重前行?不同的选择注定了不同的结局.每个企业,每个流程,都有提高效率的潜力,此次升级的智邦国际31.84版本,帮助企业一步到位整合客户.销售.采购.生产.售后.办公等业务流程,一次操作简化N个步骤,满足N个需求,用高效率替代低效率!智邦国际31.84版本,不仅带来一大波一键式.批量式操作,甚至免操作,

关于我在安装2.6.9版本bochs虚拟机时遇到的问题以及解决过程

更新于:2019.7.2 在阅读<一个64位操作系统的设计与实现>过程中,搭建实验环境遇到的诸多困难. 本人的实验环境:vmware15.0 下安装有kali-liunx虚拟机里进行的安装实验,如果有小伙伴对这款操作系统感兴趣 kail操作系统镜像: 链接:https://pan.baidu.com/s/1jkYI2RQ_lcgCPaENMQwEYg 提取码:94s9 =====================     正文   ====================== 1.安装bochs

Activity打开时软件盘自动打开的解决办法

在自动获取焦点的EditText的父布局中添加: 1 android:focusable="true" 2 android:focusableInTouchMode="true"

Beta版本测试报告以及Beta版本发布说明

Beta版本测试报告 请根据团队项目中软件的需求文档.功能说明.系统设计和Beta阶段的计划安排,写出软件的测试过程和测试结果,并回答下述问题. 在测试过程中总共发现了多少bug?每个类别的bug分别为多少个?bug的分类: a. 修复的bug:1.当使用添加功能时,没有填写数据会造成空指针异常,跳转到报错页面: 2.当删除有依赖性关系时的,没有提示有记录存在: 3.当有已报修记录时,没有对处理报修单,按钮进行处理,会造成重复报修,出错: c. 这个产品就是这样设计的,不是bug:  添加设备类

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本新增序列管理

欲了解V3.0版本的相关内容可查看下面的链接地址. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本发布 在V3.0版本的Web(Mvc.WebForm)与WinForm中我们新增了“序列管理”模块.序列管理是对定义框架的序列或叫“排序码”进行管理,在很多界面中我们可以看到有排序按钮,这儿的定义就是针对排序按钮的,当然这儿不般不需要人工来维护,系统都是自动管理的,特殊情况下可能需要人工来维护,比如:我们想把某个表的序列以指定值开始递增,在这个界面我们就可以进行