public static readonly long PageSize = (1024 * 1024) + (2048 * 1) + (512 * 2) + (512 * 4) + (512 * 4) + (512 * 8) + (128 * 512 * 1); // = ByteDataSize + IntDataSize + FloatDataSize + DoubleDataSize + StringDataSize /// <summary> /// 메모리 맵 베이스의 생성자 입니다. /// </summary> /// <param name="fileName">메모리맵 파일 이름. 기존에 같은 이름의 파일이 존재하지 않으면 만들고, 있으면 파일을 엽니다.</param> /// <param name="pageIndex">메모리 블럭 인덱스. 메모리 블럭의 인덱스 입니다. 인덱스가 메모리 블럭 보다 커지면 익셉션을 발생시킵니다.</param> /// <param name="pageCount">메모리 블럭 개수. 메모리 블럭 개수를 참고하여 메모리 맵 파일을 생성합니다. 메모리 블럭은 0보다 커야합니다.</param> protected MMVisionData_PageBase(MemoryMappedFile memMap, uint pageIndex, uint pageCount) { // 메모리 맵 파일을 엽니다. _memMap = memMap; // 메모리 시작 위치를 구합니다. (byte) long startPos; if (pageIndex >= pageCount) { throw new IndexOutOfRangeException(); } else { startPos = PageSize * pageIndex; } // 메모리 맵 뷰 클래스를 생성합니다. _byteData = new MMData_ByteData(_memMap, startPos, ByteDataSize, MemoryMappedFileAccess.ReadWrite); startPos += ByteDataSize; _boolData = new MMData_BoolData(_memMap, startPos, BoolDataSize, MemoryMappedFileAccess.ReadWrite); startPos += BoolDataSize; _shortData = new MMData_ShortData(_memMap, startPos, ShortDataSize, MemoryMappedFileAccess.ReadWrite); startPos += ShortDataSize; _intData = new MMData_IntData(_memMap, startPos, IntDataSize, MemoryMappedFileAccess.ReadWrite); startPos += IntDataSize; _floatData = new MMData_FloatData(_memMap, startPos, FloatDataSize, MemoryMappedFileAccess.ReadWrite); startPos += FloatDataSize; _doubleData = new MMData_DoubleData(_memMap, startPos, DoubleDataSize, MemoryMappedFileAccess.ReadWrite); startPos += DoubleDataSize; _stringData = new MMData_StringData(_memMap, startPos, StringDataSize, MemoryMappedFileAccess.ReadWrite); }
/// <summary> /// 입력한 데이터를 복사합니다. /// </summary> /// <param name="sourceData">복사 할 데이터</param> public void Copy(MMData_ByteData sourceData) { var copySourceData = sourceData.ToBytes(); _memView.WriteArray(0, copySourceData, 0, (int)_mapSize); }