马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
我的项目开发到今天告一段落,因为工作之余自学vlisp二次开发,很费时费力,有时遇到一个问题,几个星期都没有一点进展,现在项目上我自己开发的任务基本完成,把我遇到的两个问题的解决办法在群里分享一下,希望对后期开发遇到同样问题的,能有所帮助。
一、vlisp程序运行结束后,占用内存的大量符号,无法释放,累计导致系统无法运行。
感谢各位前辈的指点,经过反复分析,我已经解决了以上问题,把这次问题的分析剖析如下,希望给遇到同样问题的人提供借鉴。
问题产生的原因,不是因为全局变量没有释放,是在算法层面,我之前写的程序使用的是vlisp方位SQL Server 2012,本身SQL Server就很大,加上算法中需要反复请求数据库服务器,在请求过程中,产生的内存消耗无法释放。后来将数据库放到服务器中时候,不仅仅是内存占用居高不下(达到2G内存占用),而且程序运行几乎进入卡死状态。程序无法有效运行了。数据在高频词请求网络服务器过程中出现拥堵。
为了解决这个问题,我换了MySQL数据库,vlisp连接MySQL的问题很花了我一段时间。搞定之后,测试,将MySQL放在数据库服务器上,同样无法运行。后期只能分析算法,现在的处理方式是,将计算所需要的数据一次性由MySQL数据库服务器发送过来(通过SQL语句),在数值保存在全局变量中,后期所有的计算都从全局变量中获取数值,通过这种算法,最大程度减少对数据库服务器的访问频次,大大提高了计算效率。
以上问题的分析,有不对之处,请各位前辈指出。在这个项目开发过程中,遇到了很多问题都论坛求助,感谢各位前辈耐心指点。深表谢意。
二、vlisp访问MySQL数据库
在群里有前辈分享了ADOLISp函数库和说明文档,初来乍到,我认真阅读了ADOLisp说明文档。AutoCAD访问数据库,主要通过ADO方式访问,访问的工具是通过ADO-LISP Library(ADOLISP),这个工具是Vlisp访问数据库的关键。按照文档说明,ADO-LISP Library(ADOLISP)支持的数据库有Excel、Acess、Foxpro、SQL Server以及Oracle,我用撇脚的英文基础,认真学习了说明文档,为了不错过MySQL数据库,我也尝试了多种方式试图连接vlisp与MySQL,具体连接方法,见我的提问
AutoCAD通过ODBC连接MySQL和通过MySQL.oledb连接MySQL均失败。
,
咨询网友,很多给出了需要用C++或者java语言开发一个程序,exe文件,解析MySQL之后才能交给vlisp使用,这个方法让我抓狂,因为我是工作之余自学计算机,学vlisp已经很费力了,再去学C++,那要多长时间才能搞定,为此我基本放弃使用MySQL数据库了。
在即将放弃之际,我给自己3天时间,全力以赴再次尝试各种方法,甚至不惜从工资里花钱购买别人开发的插件。购买arx插件的事情已经谈妥,我还是打算在试验一下,vlisp通过ODBC连接数据库之后,在AutoCAD的数据库管理器中始终无法调出MySQL数据表,打开显示游标冲突!这个问题在网上没有找到资料。
解决的办法是,依靠前辈分享的这个ADO-LISP Library(ADOLISP)工具,在电脑上安装MySQL(mysql-installer-community-5.7.24.0) 32位,(64位访问出错,32位速度非常快,不影响使用),不需要按照我测试的步骤,先连接ODBC与MySQL,再连接AutoCAD与ODBC,这些步骤都不需要。只需要按照ADO-LISP Library(ADOLISP)要求设置访问字段就行了。具体字段是什么内容,需要看我们使用的数据库,以下是我找到的字段。
MySQL Connector/ODBC 3.51 (MyODBC 3.51)连接方式 1、本地数据库连接Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=myDataBase; User=myUsername;Password=myPassword;Option=3; 2、远程数据连接Driver={MySQL ODBC 3.51 Driver};Server=data.domain.com;Database=myDataBase;User=myUsername; Password=myPassword;Option=3; 3、特殊的TCP/IP端口连接说明:此Driver的默认端口是3306。如果没有在连接字符串中特别指出就是连接MySQL的3306端口。Driver={MySQL ODBC 3.51 Driver};Server=data.domain.com;Port=3306;Database=myDataBase;User=myUsername; Password=myPassword;Option=3; 4、特殊字符集的连接Driver={MySQL ODBC 3.51 Driver};Server=data.domain.com;charset=UTF8;Database=myDataBase;User=myUsername; Password=myPassword;Option=3; 终于解决了vlisp访问MySQL的问题,心情大悦,而且这个方法比我计划在网友那里购买的arx插件还要好用,还要简单,且非常稳定。 以上我的想法,对各位前辈来说,应该是小儿科,让各位前辈见笑了。我把这些问题的分析和想法发出来,主要是帮助像我一下在计算机领域还处于入门阶段的同仁。不足之处,恳请批评指正。
|