Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
VFP vs Other languages (Python/Ruby)
Message
From
22/05/2011 02:20:44
Al Doman (Online)
M3 Enterprises Inc.
North Vancouver, British Columbia, Canada
 
 
To
21/05/2011 19:31:23
General information
Forum:
Visual FoxPro
Category:
Other
Environment versions
Visual FoxPro:
VFP 9 SP2
OS:
Windows Server 2003
Network:
Windows 2003 Server
Database:
Visual FoxPro
Application:
Desktop
Miscellaneous
Thread ID:
01511347
Message ID:
01511383
Views:
83
>>>>>>Hi All,
>>>>>>
>>>>>>Not really a Fox question specifically but thought someone here might have an idea on this.
>>>>>>
>>>>>>I am wondering just how code execution speed of VFP compares to other languages such as Python and Ruby? Take for example the following 10million times loop:
>>>>>>
>>>>>>nStart = SECONDS()
>>>>>>a = 0
>>>>>>b = RAND()
>>>>>>FOR x = 1 TO 10000000
>>>>>>	a = a + b
>>>>>>NEXT
>>>>>>nStop = SECONDS()
>>>>>>? nStop-nStart, X, a
>>>>>>
>>>>>>
>>>>>>This runs on my machine in VFP in 2.4secs. Any idea how fast it would run in either of the alternative languages?
>>>>>>
>>>>>>Thanks,
>>>>>
>>>>>I'm not a process timer guru, but as a brain exercise decided to try your code in VFP 9 and what I think is a similar process in C# on my box -
>>>>>
>>>>>i7 cpu 1.73 ghz
>>>>>6 gb ram
>>>>>Win 7 64 bit
>>>>>
>>>>>Your code in my vfp 9 sp 2
>>>>>
>>>>>6.9 to 7.9 seconds on ten tests
>>>>>using 100,000,000 in the loop - 79.889 seconds
>>>>>
>>>>>This is my C# test :
>>>>>
>>>>>
>>>>>
>>>>>        static void Main(string[] args)
>>>>>        {
>>>>>            Random random = new Random();
>>>>>            int a = 0;
>>>>>            int b = random.Next();
>>>>>            Stopwatch stopwatch = new Stopwatch();
>>>>>            stopwatch.Start();
>>>>>            for (int i = 0; i < 10000000; i++)
>>>>>            {
>>>>>                a += b;
>>>>>            }
>>>>>
>>>>>            stopwatch.Stop();
>>>>>
>>>>>            TimeSpan elapsedTime = stopwatch.Elapsed;
>>>>>            Console.WriteLine(elapsedTime.ToString());
>>>>>            Console.Read();
>>>>>        }
>>>>>
>>>>>
>>>>>This does the 10,000,000 loop in .06 seconds.
>>>>>
>>>>>It appears your VFP code only generates one random number, so I tried to emulate that. If i move the generation of the random number inside the loop
>>>>>
>>>>>a += random.New();
>>>>>
>>>>>the whole process takes between .44 and .48 seconds.
>>>>>
>>>>>Since I know as a matter of catechism that nothing is faster than the Fox, I am sure my methodology must be flawed, but I find it interesting, nonethless and would welcome explanation.
>>>>
>>>>IAC I think you're lucky that a didn't overflow {g}
>>>
>>>I'd also be kind of curious as to why my VFP testing was getting 7+ second numbers where Nick got less than 3 ? ( see my specs )
>>>
>>>Nick, what are you running?
>>
>>
>>Charles,
>>
>>Running on an 18 month old workstation but a reasonably fast one:
>>Win2003 Server - reasonably clean install
>>CPU: AMD Phenom II X6 - 2.8Ghz
>>RAM: 2 x 4Gb DDR3 1600Mhz
>>
>>Nick
>
>I wonder if there is a performance penalty in VFP running on a 64 bit OS, since my box took about 3 times what yours did in VFP.
>
>In any case, I find the C# results interesting. Not sure if they can be extrapolated to anything meaningful as but a difference in the random function doesn't seem to account for it as when there was only addition going on inside the loop C# outperformed VFP even more dramatically. I was frankly surprised ( but I guess glad, since I actually do all my development in .net now <s> )
>
>I'd be interested to see other comparisons. I know string handling was touted in VFP as being faster than anything anyone had seen but I'm going to put together some tests comparing that in VFP and C# as well.

In the VFP test I get about 3.1 seconds on an i5-750 w/8GB RAM.

I suspect a big part of the numbers is your CPU clock. VFP is only using one core so multi-core doesn't help this test.

The i5-750 has a mild "turbo" mode, that kicks in automatically if the CPU is otherwise lightly loaded. Its nominal clock of 2.67GHz can increase temporarily to 2.8GHz.

Is your 1.73GHz i7 a mobile/laptop processor like this: http://ark.intel.com/Product.aspx?id=43124 ? That one lists a maximum turbo mode clock of 3.06GHz, if turbo kicks in your results should be faster than mine. But sometimes laptops do things like disabling turbo mode while on battery, or maybe disabling it by default in a laptop because of thermal concerns. You could check the machine's BIOS for any related settings.
Regards. Al

"Violence is the last refuge of the incompetent." -- Isaac Asimov
"Never let your sense of morals prevent you from doing what is right." -- Isaac Asimov

Neither a despot, nor a doormat, be

Every app wants to be a database app when it grows up
Previous
Reply
Map
View

Click here to load this message in the networking platform