Skip to content
This repository was archived by the owner on Jan 3, 2023. It is now read-only.

Conversation

@ghost
Copy link

@ghost ghost commented Jan 7, 2016

There may be a missing length check on exists, as without hte length check the cost of a comparison and a call is incurred.

Adding the simple len > 0 check before the loop appears (in the basic cases I have tested) to near triple performance.

let f arr = 
    Array.exists (fun e -> e = true) arr

for i in 0..60000000 do f ([||]:bool []) ;; // 1.8 seconds

let f2 arr = 
    if Array.length arr > 0 then
        Array.exists (fun e -> e = true) arr
    else 
        false

for i in 0..60000000 do f2 ([||]:bool []) ;; // 0.430 seconds

Note: this is something I have found an isolated instance of, it may be appropriate to ensure that such checks (if they are required, I can only speak for my use case) are consistant accross other modules, such as Seq\List.

There may be a missing length check on exists, as without hte length check the cost of a comparison and a `call` is incurred.

Adding the simple len > 0 check before the loop appears (in the basic cases I have tested) to near triple performance.
```
let f arr = 
    Array.exists (fun e -> e = true) arr

for i in 0..60000000 do f ([||]:bool []) ;; // 1.8 seconds

let f2 arr = 
    if Array.length arr > 0 then
        Array.exists (fun e -> e = true) arr
    else 
        false

for i in 0..60000000 do f2 ([||]:bool []) ;; // 0.430 seconds
```
@ghost
Copy link
Author

ghost commented Jan 7, 2016

ive been advised that this belongs in visualfsharp, will close here and move accross

@ghost ghost closed this Jan 7, 2016
@ghost ghost mentioned this pull request Jan 7, 2016
This pull request was closed.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants