C/C++不能运行时动态编译代码,编写公式编辑器,用户输入循环判断语句保存后执行该怎么实现啊?

今天在公司遇到了一个问题,需要找一条MQ消息的日志记录,遇到了一些问题,所以把解决问题的思路记下来,分享给大家

直接加到项目中的pom.xml文件中

百度翻译了下,这包看起来功能贼强大

我们只用到了一行代码,bz2解压关键代码:



真正的登录信息隐藏掉了,哈哈

看到OSS工具类中有直接将文件读取成流的方法,看到这个方法,我有一个大胆的想法。嘿嘿嘿
oss工具类可以将oss上的文件以bety[]数组的形式读取,结果可以是一个bety数组输入流,然后这个比特数组输入流,可以传给BZIP2工具解压,返回值是bz2的解压输入流,这个IO工具里面,方法参数有一个以输入流的方式的入参,大家都是InputStream,很好很强大,都串起来了,根本不用下载文件到本地,代码又省了好多步骤。妙啊!!!

然而,想像很美好,结果很残酷,运行测试类,运行了一会,直接内存溢出了。
不信邪,调大JVM虚拟机内存,再次启动运行,继续爆炸,继续加,继续爆炸。。。。。。

开始分析,为啥会内存溢出,看是再次回顾代码
会不会是ArrayList的锅,这玩意会自动扩容,百度了下,ArrayList自动扩容
数组内元素的个数加1,看是否等于或大于数组长度,等于或大于数组长度,处罚扩容
ArrayList在第一次插入元素add()时分配10(默认)个对象空间。假如有20个数据需要添加,那么会在第11个数据的时候(原始数组容量存满时),按照1.5倍增长;之后扩容会按照1.5倍增长(10、15、22、、、)
看了下文件的大小,此时,读取的文件的大小是1G左右
ArrayList的最大容量是2的31次方减1,应该是一个很大的数字
21 ,大概21亿行,才会爆炸。应该大概也许不是它,应为这个数太大了
但是,ArrayList的扩容机制,让他很浪费内存,我们的需求只是遍历,不是查询,用不到下标,使用
LinkedList足够了,他底层使用的是链表,增删快,查询略慢,不过无所谓,我们只遍历
IOUtil工具类修改如下:

优化了一个点,再跑下试试,依旧还是内存溢出,继续爆炸。。。。。。
继续分析,我是需要每行对比关键字,我为什么要把文件读到List数组中在进行每行的关键字对比,这不相当于我把整个文件都读到内存中了,不爆炸才怪。我真傻,真的

3.0版,究极进化,文件每次只读取一行进行关键字匹配

到此,顺利解决了内存溢出的问题,一次读取一行进项匹配,实现方法也可以用IOUtil类中的BufferedReader类的方法readLine()方法实现,这个是用Scanner 类实现的,是不是很眼熟这个类
没错,就是刚开始学习Java的时候用到的那个类。

  1. 如果只是遍历,可以使用LinkedList代替ArrayList,减少内存开销
  2. 内存就是比硬盘速度快,SSD都不行,测试了下和1.0版本方法做对比,1.0版本的大部分时间浪费到了下载和解压,再读取的步骤,通过3.0版本代码的运行时的对比,可以看到,解压的速度也很快,大部分时间是把数据从内存写道硬盘上。
  3. 我之前错怪CUP了,解压文件原来以为是cpu不给力,结果硬盘的IO才是瓶颈。
  4. 所以编程要减少IO的消耗,真是太对了,可以减少程序的运行时间,提高程序的反应速度。
  5. 读取大型文件时,采用一行一行读的办法,不要采用整个文件一下读到内存的方法,妈妈再也不用怕我读文件内存溢出了

SOLIDWORKS软件作为Dassault在主流市场的主要品牌,SOLIDWORKS遵循易用性,稳定性和创新性的原则,并继续进行技术创新,赢得了杰出的技术和市场表现。

在市场大环境下,SOLIDWORKS也是非常的受欢迎,下面鑫辰信息科技为您介绍SOLIDWORKS的一些快捷键技巧,希望能帮到您!

140.您可在SOLIDWORKS图形区域设定渐变颜色方案。其位置在工具/选项/系统选项/颜色。您一旦设定颜色,记住复?quot;在零件及装配体中使用渐变背景"选项。

141.当在装配体中输入文件或插入新零部件时,您可控制使用哪个文件模板。在工具/选项/系统选项/默认模板下,选择"提示用户选择文件模板"。

142.如果您已保存一个RapidDraft工程图但没能在RapidDraft允许隐藏边线选择,您可恢复选择。装入模型,右键单击一个视图,选择属性,然后复选"隐藏的边线可选择"。

143.线型工具栏上的"颜色显示模式"按钮允许用户在显示指定给草图实体的图层及明确颜色和代表此实体状态(已定义、过定义、等)的颜色之间切换。

144.混合面圆角能更好地消除模型的面。这就是为什么当常规圆角不成功时一般都推荐混合面圆角。

145.您不必为每一个SOLIDWORKS新版本发送新注册向导文件的电子邮件。现有订购客户如已填写了一次注册向导应能获取从所发货的CD上自动生成的注册码[支持正版!~违反版规者请会员热心举报][支持正版!~违反版规者请会员热心举报]。

146.在PropertyManager上显示的数值相对于草图的坐标系来测量。这与从工具/测量的数值不一样,因为这是相对于所选的坐标系(默认为模型原点)来测量。

147.eDrawings支持多图纸工程图。欲在eDrawing上观看不同的图纸,在eDrawing上右键单击任何地方,选择图纸选项,然后选择图纸。

148.您可以在装配体中由装配体或零件控制零部件HLR/HLG颜色。选择视图/显示,激活/关闭"使用HLR/HLG的零部件颜色"。要使显示更新需重建模型。

149.您可在工程图中打印一个窗口,而不必打印整个图纸。选择文件/打印。在打印范围选项,选择'所选部分'选项,然后单击确定。将打开一带灰色"窗口"的打印预览,可通过拖动来移动并使用比例选项来改变大小。

150.您可使用工具/选项/文件属性/单位/线性单位在文件/页面设置中控制线粗的小数精度。

151.能添加到SOLIDWORKS模型中的最大光源数为八。

152.装饰螺纹线能跟随推拔孔以及简单贯通孔。

153.您可制作从装配体特征阵列所派生的零部件阵列。

154.您可在3D草图中使用转换实体草图工具。

155.当生成一通过自由点的曲线时,您可使用带由逗号分隔的x

156.孔向导自定义孔储存在名为default.mdb的MicrosoftAccess文件内。您可将此文件复制到另一电脑来转移那些收藏

158.在SOLIDWORKS3DMeeting,用户可登录到中立服务器作为开始会议的方法。欲指定一服务器,打开MicrosoftNetMeeting,然后选择工具/选项,在提供的地方键入目录名称。

159.您可爆炸一子装配体而不爆炸顶层的装配体。选择"步骤编辑工具"(黄色步骤按钮)。这将进一步打开对话。然后选择选项"仅对零部件零件"接着选择所需零件。

160.您可将SOLIDWORKS模型内的曲面和实体从FeatureManager设计树或图形区域中的鼠标右键菜单中隐藏/显示。因为模型隐藏时为不可见,使用视图、隐藏/显示实体来使曲面或实体再可见往往更容易。

161.如果在编辑图纸格式时出现错误,您可回到默认的格式。右键单击然后选择属性,接着单击"重新装入图纸格式"。

162.您可在不处于编辑子装配体模式时删除配合和子装配体层特征,但您必须编辑子装配体来删除子装配体中的零部件。

163.如果您使用非圆形轮廓来生成局部视图,您可使视图默认显示圆形。在工具/选项/系统选项/工程图中复选"显示新的局部视图图标为圆"。

164.您可选择默认不将模型的复制尺寸插入到工程图(在工具/选项/系统选项/工程图里),或当插入模型项目方框被选择时

165.您可将曲面的"开环"边线显示为不同的颜色-以区别开来内部边线、相切边线、或轮廓边线。复选工具/选项/系统选项/边线显示/选择下的方框。开环边线颜色受工具/选项/系统选项/颜色控制。

166.您可指定工程图中隐藏切边、视图箭头等的字体。选择工具/选项/文件属性/线型。

我要回帖

更多关于 c++怎么编译运行 的文章

 

随机推荐