# Investigating large latency on a constrained Windows environment

**URL:** <https://discourse.julialang.org/t/investigating-large-latency-on-a-constrained-windows-environment/114482>\
**Category:** General Usage\
**Tags:** startup, ttfp, ttfx, latency\
**Created:** [May 18, 2024, 11:07am UTC](https://discourse.julialang.org/t/investigating-large-latency-on-a-constrained-windows-environment/114482 "2024-05-18T11:07:44Z")\
**Posts on this page:** 6\
**Page:** 5

<div class="post-metadata">

**Author:** ![TimG](https://avatars.discourse-cdn.com/v4/letter/t/82dd89/32.png) [@TimG](https://discourse.julialang.org/u/TimG)\
**Post date:** [May 22, 2024, 10:16am UTC](https://discourse.julialang.org/t/investigating-large-latency-on-a-constrained-windows-environment/114482/82 "2024-05-22T10:16:06Z")

</div>

```julia
julia> write("add.zig",
              """
              export fn add(a: i32, b: i32) i32 {
                  return a + b;
              }
              """)

julia> run(`$zig build-lib -dynamic -lc add.zig`);

julia> using Libdl

julia> @time dlopen("./add.dll")
  1.021884 seconds
Ptr{Nothing} @0x0000000002720000

julia> libadd = :add
:add

julia> @ccall libadd.add(5::Int32, 5::Int32)::Int32
10
```

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [May 22, 2024, 12:38pm UTC](https://discourse.julialang.org/t/investigating-large-latency-on-a-constrained-windows-environment/114482/83 "2024-05-22T12:38:50Z")

</div>

I’m guessing that if you repeat loading libadd.dll in a new Julia instance that it takes less time within the same Windows session?

```julia
using Libdl
@time dlopen("./libadd.dll")

```

It looks like you got `zig` working! Did `winget` do it? I will revise the exe instructions above.

---

<div class="post-metadata">

**Author:** ![TimG](https://avatars.discourse-cdn.com/v4/letter/t/82dd89/32.png) [@TimG](https://discourse.julialang.org/u/TimG)\
**Post date:** [May 22, 2024, 1:03pm UTC](https://discourse.julialang.org/t/investigating-large-latency-on-a-constrained-windows-environment/114482/84 "2024-05-22T13:03:42Z")

</div>

Same command window:

```julia
julia> @time dlopen("./add.dll")
  0.005680 seconds
Ptr{Nothing} @0x0000000002720000

```

Yes, `winget` worked.

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [May 22, 2024, 1:13pm UTC](https://discourse.julialang.org/t/investigating-large-latency-on-a-constrained-windows-environment/114482/85 "2024-05-22T13:13:34Z")

</div>

I updated the code in

> [@Investigating large latency on a constrained Windows environment](https://discourse.julialang.org/t/investigating-large-latency-on-a-constrained-windows-environment/114482/70):
>
> Yes, that matches my expectation. We can isolate the effect to DLL loading. We can build a simple DLL using zig as follows. julia\> using zig\_jll julia\> write("add.zig", """ export fn add(a: i32, b: i32) i32 { return a + b; } """) 56 julia\> zig = zig\_jll.zig(); julia\> run(`$zig build-lib -dynamic -lc add.zig`); julia\> using Libdl julia\> @time dlopen("./libadd.so") # probably add.dll for you Ptr{Nothing} @0x0000000000c39e10 julia\> libadd = :libadd :li…

---

<div class="post-metadata">

**Author:** ![TimG](https://avatars.discourse-cdn.com/v4/letter/t/82dd89/32.png) [@TimG](https://discourse.julialang.org/u/TimG)\
**Post date:** [May 22, 2024, 1:23pm UTC](https://discourse.julialang.org/t/investigating-large-latency-on-a-constrained-windows-environment/114482/86 "2024-05-22T13:23:29Z")

</div>

```julia
julia> run(`testdll.exe`)
ERROR: IOError: could not spawn `testdll.exe`: permission denied (EACCES)
Stacktrace:
 [1] _spawn_primitive(file::String, cmd::Cmd, stdio::Vector{Union{RawFD, Base.Libc.WindowsRawSocket, IO}})
   @ Base .\process.jl:128
 [2] #784
   @ .\process.jl:139 [inlined]
 [3] setup_stdios(f::Base.var"#784#785"{Cmd}, stdios::Vector{Union{RawFD, Base.Libc.WindowsRawSocket, IO}})
   @ Base .\process.jl:223
 [4] _spawn
   @ .\process.jl:138 [inlined]
 [5] run(::Cmd; wait::Bool)
   @ Base .\process.jl:479
 [6] run(::Cmd)
   @ Base .\process.jl:477
 [7] top-level scope
   @ REPL[25]:1

```

`testdll.exe` exists. If I double click, I get:

![image](https://global.discourse-cdn.com/julialang/original/3X/8/e/8e07da4fc8abeafa279f0a0330ac82c8f179cc8b.png)

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [May 22, 2024, 2:21pm UTC](https://discourse.julialang.org/t/investigating-large-latency-on-a-constrained-windows-environment/114482/87 "2024-05-22T14:21:14Z")

</div>

I’m also getting similar issues on my corporate Windows machine, which is curious. Let me see if playing with permissions might help.

I think Matt is right though. Ultimately management has to make a decision whether they want to slow you down or not.

[Previous page](https://discourse.julialang.org/t/investigating-large-latency-on-a-constrained-windows-environment/114482.md?page=4)
