AX2009里调用.NET DLL的效率问题
经常在AX2009里引用.NET的DLL,因为序列化和反序列化,用.NET的定义的实体方便一些,平时数据量不大,也没觉得有什么问题,今天要把几万条数据从数据库中取出来序列化以后,调用第三方系统的接口,发现很慢,开始以为是从数据库里取数慢,于是优化索引,发现没有任何改善。后来把.NET实体调用部分去掉,很快就完成了。
于是在.NET里用C#写了一段代码做测试
DateTime startTime = DateTime.Now;
POSHelper.POS.GoodsBarcodeList barcodeList = new POSHelper.POS.GoodsBarcodeList();
for (int i = ; i <= ; i++)
{
POSHelper.POS.GoodsBarcode barcode = new POSHelper.POS.GoodsBarcode();
barcode.Barcode = "";
barcode.CName = "";
barcode.Code = "";
barcode.EAMU = "";
barcodeList.Add(barcode);
}
DateTime endTime = DateTime.Now;
MessageBox.Show((endTime - startTime).TotalMilliseconds.ToString());
上面这一段代码执行只要20-100毫秒的样子,正常范围。
在X++里写一段等效的代码
POSHelper.POS.GoodsBarcodeList goodsBarcodeList;
POSHelper.POS.GoodsBarcode goodsBarcode;
System.DateTime startTime,endTime;
System.TimeSpan timeSpan;
int i;
; new InteropPermission(InteropKind::ClrInterop).assert(); goodsBarcodeList = new POSHelper.POS.GoodsBarcodeList();
startTime = System.DateTime::get_Now();
goodsBarcodeList = new POSHelper.POS.GoodsBarcodeList(); for(i=;i<=;i++)
{
goodsBarcode = new POSHelper.POS.GoodsBarcode();
goodsBarcode.set_Barcode("");
goodsBarcode.set_CName("");
goodsBarcode.set_Code("");
goodsBarcode.set_EAMU("");
goodsBarcodeList.Add(goodsBarcode);
}
endTime = System.DateTime::get_Now();
CodeAccessPermission::revertAssert();
timeSpan = System.DateTime::op_Subtraction(endTime,startTime); print timeSpan.get_TotalMilliseconds();
pause;
用了38290毫秒,也就是整整用了38S,搞不懂它在思考什么。
在AX2009里调用.NET类库的效率是让人崩溃的,偶尔数据量小不频繁调用的代码,用用的确蛮方便的,要是数据量大,考虑效率的情况下,还是换个方式吧。。。
AX2009里调用.NET DLL的效率问题的更多相关文章
- c#调用c++ dll(一)
首先来说说c++中的dll 核心的一些知识 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作.可能存在一些模块的功能较为通用,在构造其它软件系统时 ...
- 在 C++Builder 工程里调用 DLL 函数
调用 Visual C++ DLL 给 C++Builder 程序员提出了一些独特的挑战.在我们试图解决 Visual C++ 生成的 DLL 之前,回顾一下如何调用一个 C++Builder 创建的 ...
- NX二次开发-C#使用DllImport调用libufun.dll里的UF函数(反编译.net.dll)调用loop等UF函数
在写这篇文章的时候,我正在头晕,因为下班坐车回家,有些晕车了.头疼的要死.也吃不下去饭. 版本:NX11+VS2013 最近这一年已经由C++过度到C#,改用C#做应用程序开发和NX二次开发. C#在 ...
- c# 调用c++DLL方法及注意事项
引用命名空间 using System.Runtime.InteropServices 调用方法: 一.静态加载 用DllImprot方式来加载c++DLL.如下格式: //对应c++方法 //voi ...
- C#调用C++ DLL类方法
C++的优势在于高效灵活,C#的优势在于简单易用,两者结合起来对项目开发来说是件好事,而且C++不容易反编译,也保障了代码的安全性,如果一些核心算法使用C#编写,那么保密就是一个问题. C++生成的D ...
- LR调用动态链接库DLL
什么是动态库? 动态库一般又叫动态链接库(DLL),是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库. 动态链接提供了一种方法 ,使进程可以 ...
- c#调用c++ dll的几种类型(转)
http://www.sosuo8.com/article-2012/dllleixingzhuanhuan.htm 在合作开发时,C#时常需要调用C++DLL,当传递参数时时常遇到问题,尤其是传 ...
- C#中调用unmanaged DLL
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)
文章目录: 1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Ap ...
随机推荐
- 一键安装Davinci
官网:https://edp963.github.io/davinci/index.html 下载地址:https://github.com/edp963/davinci 环境:Centos7 ...
- .net core2.0获取host的方法
Example there's an given url: http://localhost:4800/account/login 获取整个url地址: 在页面(cstml)中 Microsoft.A ...
- LVS中Windows作为真实主机(RealServer)时的设置方法
最近,公司新推了一个电商项目,IIS+ASP.而上面大大规划了要用 LVS 负载均衡集群,在这个技术陈旧的企业,LVS 项目还是去年才真正推行.由于最开始是由我测试的,所以这次的部署又落到了我头上了. ...
- 【转】META标签指南:哪些meta标签该用哪些不该用?
以下内容来源:http://lusongsong.com/reed/8766.html META标签是网页代码中HEAD区的一个关键标签,其提供的信息虽然用户不可见,但却是文档的最基本的元信息.说起m ...
- php5.5.7添加pgsql,pdo_pgsql,swoole
一:下载php源码sudo wget cn2.php.net/distributions/php-X.X.X.tar.gz 二:解压 tar xzf /php-X.X.X.tar.gz 三:进入源码e ...
- Deviceiocontrol操作异常时,关于getlasterror的错误代码解析
[0]-操作成功完成. [1]-功能错误. [2]-系统找不到指定的文件. [3]-系统找不到指定的路径. [4]-系统无法打开文件. [5]-拒绝访问. [6]-句柄无效. [7]-存储控制块被损坏 ...
- java安装与配置
参考:https://blog.csdn.net/gaokao2011/article/details/75211429 Win 1.JDK JDK 可以到官网下载http://www.oracle. ...
- 1.Java
面向对象:封装,继承,多态 A组合B:那么B就可以调用A中的方法 A关联B:A中的成员变量是用B声明的 A和B的依赖关系:A中某个方法的参数是B声明的对象或者返回值类型是B的数据类型 Static方法 ...
- redis哨兵架构的基础知识及部署和管理
一.前言 1.哨兵的介绍 sentinal,中文名是哨兵 哨兵是redis集群架构中非常重要的一个组件,主要功能如下 ()集群监控,负责监控redis master和slave进程是否正常工作 ()消 ...
- js 连接mqtt
js连接mqtt 项目中要用到mqtt,前端调用,使用github开源的paho-mqtt.js,api还是挺全面的,网上各种教程很全面,但是感觉代码过于杂乱,故而封装的一下.仿jquery ajax ...