Public Sub Test()
Call AA(1, 2, 3, 4, 5) ' ---> 标准呼叫法
End Sub
Public Sub AA(a1, a2, a3, a4, a5 )
End Sub
[请问]
除了 Call AA(1, 2, 3, 4, 5) ' ---> 标准呼叫法
有没有其他呼叫法, 例如用 API 可以达成 Call AA(1, 2, 3, 4, 5) 一样的结果
要如何写呢
[目的] 找出比 Call AA(1, 2, 3, 4, 5) 耗时更少 的另外一种呼叫法
thanks
[ps] 不要 CallByName() 因为效能太低
7 个解决方案
#1
Call AA(1, 2, 3, 4, 5)
已经是最高效的调用方式了,它就是原生的调用,如果你反汇编它的机器码,你会看到,它就是对应几个pop将参数放入堆栈和一个call跳转指令。不可能再高效了。
从写法上说,还可以简化一些,写成AA 1, 2, 3, 4, 5,两者等价。
已经是最高效的调用方式了,它就是原生的调用,如果你反汇编它的机器码,你会看到,它就是对应几个pop将参数放入堆栈和一个call跳转指令。不可能再高效了。
从写法上说,还可以简化一些,写成AA 1, 2, 3, 4, 5,两者等价。
#2
如果 就是对应几个pop将参数放入堆栈和一个call跳转指令
那为何他比较慢
是什么原因呢
测试过 delphi
procedure AA(a1: olevariant; a2: olevariant; .....) ;
begin
end; --> VB 如果要 2秒, delphi 只要1秒
procedure AA(a1: longint a2: longint; .....) ;
begin
end; --> VB 如果要 2秒, delphi 只要 0.01秒
那为何他比较慢
是什么原因呢
测试过 delphi
procedure AA(a1: olevariant; a2: olevariant; .....) ;
begin
end; --> VB 如果要 2秒, delphi 只要1秒
procedure AA(a1: longint a2: longint; .....) ;
begin
end; --> VB 如果要 2秒, delphi 只要 0.01秒
#3
delphi支持fastcall
也就是不放入堆栈,直接靠寄存器传参数
VB不支持,除非你能改造linker、compiler和vbvm。VB使用stdcall。
也就是不放入堆栈,直接靠寄存器传参数
VB不支持,除非你能改造linker、compiler和vbvm。VB使用stdcall。
#4
在delphi也可以指定stdcall强制delphi不使用fastcall,那么你可以观察到速度会慢很多,毕竟寄存器的速度和内存有一个数量级的差别。
甚至这样,vb还是会慢一些,如果你vb使用了variant类型,非本地类型,或者相同的函数实现,VB都会更慢。
甚至这样,vb还是会慢一些,如果你vb使用了variant类型,非本地类型,或者相同的函数实现,VB都会更慢。
#5
请问 ( 看到您也有回覆 C#, 猜测也会C# )
(1) C# 可以用 FastCall 吗
(2) C# 的 基础运算 方面
( 四则运算+ - * / ^ , String处理, String內存配置 , Array 读写 , Call Sub, Call Class ..这几个方面 )
会比 VB 快吗 ( VB 编译优化已经全开了)
因为算根本不会 C#
之前只测试过 C# 的 GUI , 确定 .Net 的 GUI 特别慢, 慢上几倍以上 ( 这方面输 VB 的 OCX )
之前都是google搜寻 C#, delphi, VB 效能比较文章, 也找不太到相关文章
(1) C# 可以用 FastCall 吗
(2) C# 的 基础运算 方面
( 四则运算+ - * / ^ , String处理, String內存配置 , Array 读写 , Call Sub, Call Class ..这几个方面 )
会比 VB 快吗 ( VB 编译优化已经全开了)
因为算根本不会 C#
之前只测试过 C# 的 GUI , 确定 .Net 的 GUI 特别慢, 慢上几倍以上 ( 这方面输 VB 的 OCX )
之前都是google搜寻 C#, delphi, VB 效能比较文章, 也找不太到相关文章
#6
多线程方式调用,ADDRESSOF
#7
C#和VB.NET的科学运算性能会比VB6强5~10倍。你试下就知道了。
但是.NET也不支持fastcall。
#1
Call AA(1, 2, 3, 4, 5)
已经是最高效的调用方式了,它就是原生的调用,如果你反汇编它的机器码,你会看到,它就是对应几个pop将参数放入堆栈和一个call跳转指令。不可能再高效了。
从写法上说,还可以简化一些,写成AA 1, 2, 3, 4, 5,两者等价。
已经是最高效的调用方式了,它就是原生的调用,如果你反汇编它的机器码,你会看到,它就是对应几个pop将参数放入堆栈和一个call跳转指令。不可能再高效了。
从写法上说,还可以简化一些,写成AA 1, 2, 3, 4, 5,两者等价。
#2
如果 就是对应几个pop将参数放入堆栈和一个call跳转指令
那为何他比较慢
是什么原因呢
测试过 delphi
procedure AA(a1: olevariant; a2: olevariant; .....) ;
begin
end; --> VB 如果要 2秒, delphi 只要1秒
procedure AA(a1: longint a2: longint; .....) ;
begin
end; --> VB 如果要 2秒, delphi 只要 0.01秒
那为何他比较慢
是什么原因呢
测试过 delphi
procedure AA(a1: olevariant; a2: olevariant; .....) ;
begin
end; --> VB 如果要 2秒, delphi 只要1秒
procedure AA(a1: longint a2: longint; .....) ;
begin
end; --> VB 如果要 2秒, delphi 只要 0.01秒
#3
delphi支持fastcall
也就是不放入堆栈,直接靠寄存器传参数
VB不支持,除非你能改造linker、compiler和vbvm。VB使用stdcall。
也就是不放入堆栈,直接靠寄存器传参数
VB不支持,除非你能改造linker、compiler和vbvm。VB使用stdcall。
#4
在delphi也可以指定stdcall强制delphi不使用fastcall,那么你可以观察到速度会慢很多,毕竟寄存器的速度和内存有一个数量级的差别。
甚至这样,vb还是会慢一些,如果你vb使用了variant类型,非本地类型,或者相同的函数实现,VB都会更慢。
甚至这样,vb还是会慢一些,如果你vb使用了variant类型,非本地类型,或者相同的函数实现,VB都会更慢。
#5
请问 ( 看到您也有回覆 C#, 猜测也会C# )
(1) C# 可以用 FastCall 吗
(2) C# 的 基础运算 方面
( 四则运算+ - * / ^ , String处理, String內存配置 , Array 读写 , Call Sub, Call Class ..这几个方面 )
会比 VB 快吗 ( VB 编译优化已经全开了)
因为算根本不会 C#
之前只测试过 C# 的 GUI , 确定 .Net 的 GUI 特别慢, 慢上几倍以上 ( 这方面输 VB 的 OCX )
之前都是google搜寻 C#, delphi, VB 效能比较文章, 也找不太到相关文章
(1) C# 可以用 FastCall 吗
(2) C# 的 基础运算 方面
( 四则运算+ - * / ^ , String处理, String內存配置 , Array 读写 , Call Sub, Call Class ..这几个方面 )
会比 VB 快吗 ( VB 编译优化已经全开了)
因为算根本不会 C#
之前只测试过 C# 的 GUI , 确定 .Net 的 GUI 特别慢, 慢上几倍以上 ( 这方面输 VB 的 OCX )
之前都是google搜寻 C#, delphi, VB 效能比较文章, 也找不太到相关文章
#6
多线程方式调用,ADDRESSOF
#7
C#和VB.NET的科学运算性能会比VB6强5~10倍。你试下就知道了。
但是.NET也不支持fastcall。