.NET์ MemoryMappedFile์ ์ด์ฉํด ๋ฉ๋ชจ๋ฆฌ ๋งคํ ํ์ผ์ ์ด์ฉํ ์ ์์ต๋๋ค. ๋ค๋ง, C์ธ์ด์์ ๋งคํ๋ ์ฃผ์๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ฒ๋ผ ์ ๊ทผํ ์ ์๋๋ฐ ๋ฐํด C#์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ๋ค๋ฃจ๋ ์ธ์ด๊ฐ ์๋๋๋งํผ ๋๊ฐ์ง ๋ฐฉ์์ ํตํด ์ ๊ทผ์ ํ ์ ์๊ฒ ํฉ๋๋ค.
-
MemoryMappedViewAccessor
CreateViewAccessor()
๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ฉ๋ชจ๋ฆฌ ๋งคํ ํ์ผ์ ์ ๊ทผํ ์ ์๊ฒ ํฉ๋๋ค. ์ธ์๋ฅผ ์ฃผ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋งคํ ํ์ผ ์ ์ฒด๋ฅผ ์ ๊ทผํ ์ ์์ผ๋ฉฐ,position
๊ณผlength
๋ก ๋ถ๋ถ ์ ๊ทผAccessor
๋ฅผ ์์ฑํ ์๋ ์์ต๋๋คโฆ ์ดํ,Accessor
๋ฅผ ํตํด position์์น์ ๊ฐ์ ์ฝ๊ฑฐ๋ ์ธ ์ ์๊ฒ ๋ฉ๋๋ค.
๊ด๋ฆฌ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ C# ์ธ์ด์์๋ ์ด๋ฐ์์ ๋ฐฉ๋ฒ์ด ์ต์ ์ผ์๋ฐ์ ์์ง๋ง, ์์ฝ๊ตฐ์. ํ์ผ์์ญ์ OS์ ํ์ ๋น๋ ค ๋ฉ๋ชจ๋ฆฌ์ฒ๋ผ ์ ๊ทผํ ์๋ง ์๋ค๋ฉด ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ด์ ์ด ์์ํ ๋ฐ์. -
MemoryMappedViewStream ํด๋์ค (System.IO.MemoryMappedFiles) | Microsoft Docs
๋ค๋ฅธ ๋ฐฉ์์ผ๋ก๋CreateViewStream()
์ ํตํด ์คํธ๋ฆผ์ผ๋ก ์ ๊ทผํ๋ ๋ฐฉ์์ ๋๋ค. ์ฌ์ฉ๋ฒ์ ๊ธฐ๋ณธStream
๊ณผ ๋์ผํฉ๋๋ค.
Span๋ฅผ ํตํด MemoryMappedFile
์ ์ฌ์ฉํ ์ ์๊ฒ ๋ค ์ถ์ด์ ์ ๊ทผ์ ํ๋๊ฒ์ธ๋ฐ์. ์์ง์ Accessor
์ ์ง์์ด ์์ต๋๋ค. ํด์ ๊ด๋ จ github์ ํ๋์ ๊ฒ์ํด๋ดค๋๋ฐ ๊ทธ๋ด๋งํ ์ด์ ๋ ์๋๊ตฐ์.
API Proposal: Add Span accessor for MemoryMapped files ยท Issue #37227 ยท dotnet/runtime (github.com)
์์ง Span<T>
ํํ๋ฅผ ์์ ์ ์ผ๋ก ์ ๊ณตํ ๋งํ ํํ๋ฅผ ์ฐพ์ง ๋ชปํ๋ฏ ํฉ๋๋ค. (access violation ๋ฑ)
๊ทธ๋๋ ๋ฐฉ๋ฒ์ด ์์์์ผ ์๊ฒ ์ง์. ์ด์จ๋ MemoryMappedFiles
๋ ๋ด๋ถ์ ์ผ๋ก๋ ์ด์์ฒด์ ์ API๋ฅผ ์ด์ฉํด์ผ๋ง ํฉ๋๋ค.
How memory mapping files are accessed as a variable?If not, is it possible? ยท Issue #42736 ยท dotnet/runtime (github.com)
์ด ๊ธ์์๋ ํธ๋ค์ ํตํด ํฌ์ธํฐ๋ฅผ ํ๋ํ๋ ๊ฐ์ด๋๊ฐ ๋์ต๋๋ค.
์ฝ๋๋ก ์์ง ํ
์คํธ๋ฅผ ํด๋ณด์ง๋ ์์์ง๋ง, ๊ธ๋ก๋ง ๋ดค์ ๋๋ ์ ํฌ์ธํฐ๋ฅผ Span<byte>
๋๋ Memory<byte>
์ผ๋ก ๋ณํํ์ฌ ์ฌ์ฉํ๋ฉด ๋์ง ์์๊น ์๊ฐํด๋ด
๋๋ค.