inflearn logo
강의

Course

Instructor

[C# and Unity MMORPG Game Development Series] Part 7: MMO Content Implementation (Basics of Unity + C# Server Integration)

Protobuf porting (code review)

SendBuffer.cs 삭제 후 대체 되는 부분의 장단점?

Resolved

200

mhyim

65 asked

1

루키스님 안녕하세요?

기존 SendBuffer.cs는 메모리 누수 이슈 등으로 삭제하고

새로운 기법을 알려준다고 말씀해주셨는데

 

그게 최종적으로 ClientSession.cs의 Send()함수가 되는게 맞을까요? (아래 코드블록)

맞다면 Send()가 호출 될 때 마다 버퍼를 새로 생성하기 때문에

SendBuffer.cs의 강점이었던 하나의 거대한 메모리를 사용하면서 버퍼 생성 및 Copy가 줄어드는 이점이 없어진 걸로 이해가 됐는데,

기존의 SendBuffer.cs와 새로운 대체된 Send()의 장단점이 각각 궁금합니다.

 

ClientSession.cs

public void Send(IMessage packet)
{
	string msgName = packet.Descriptor.Name.Replace("_", string.Empty);
	MsgId msgId = (MsgId)Enum.Parse(typeof(MsgId), msgName);
	ushort size = (ushort)packet.CalculateSize();
	byte[] sendBuffer = new byte[size + 4];
	Array.Copy(BitConverter.GetBytes((ushort)(size + 4)), 0, sendBuffer, 0, sizeof(ushort));
	Array.Copy(BitConverter.GetBytes((ushort)msgId), 0, sendBuffer, 2, sizeof(ushort));
	Array.Copy(packet.ToByteArray(), 0, sendBuffer, 4, size);
	Send(new ArraySegment<byte>(sendBuffer));
}

C# unity

Answer 1

1

Rookiss

장점 : 필요한 만큼 메모리를 할당해서 사용
단점 : 매 번 마다 할당해야 함

~입니다.
고전적인 메모리 풀링을 사용하면 큰 덩어리를 만들어서 필요할 때마다 쪼개 사용하는 개념인데요.
하지만 C++과 다르게 C#에선 자유로운 RefCount 및 메모리 관리가 힘들어서
사용한 메모리 하나라도 사용중이면 반납이 안 되면
또 MemoryChunk를 할당해야 하므로 살짝 지저분하긴 하죠.
그래서 4강 강의에서 사용하던 방식은 요렇게 수정된 것입니다.

0

mhyim

시간 내서 답변해주셔서 정말 감사합니다!

MessagePack

0

84

1

본인 플레이어 이동 관련 질문

0

49

1

Part7 Part9 질문이 있습니다.

0

71

1

.

0

116

1

.

0

105

2

게임 로직 루프에서 게임 틱 누락으로 인한 높은 CPU 사용 문제

0

91

1

타일 팔레트 깔았는데도 안돼요

0

115

2

2D로 그냥 만들어도 되나요?

0

81

2

지난 강의와 이어지는게 맞을까요?

0

80

2

순환참조 문제로 인해 발생하는 문제는 없을까요?

0

162

2

유니티 클라와 C++서버연동

0

277

2

멀티플레이 테스트 환경 관련 질문입니다

0

207

3

강의 후반부에 순서 동기화를 위해 잡큐를 사용 안 한 부분 질문입니다!

0

150

2

코드 관련한 몇 가지 질문입니다!

0

153

2

3d 프로젝트 이동 동기화 관련

0

321

4

파트 7 스트레스 테스트 질문 드립니다.

1

189

2

맵 이동 방식

0

133

0

맵 이동 관련해서 질문드립니다.

0

91

1

안녕하세요 도저히 알 수 없는 오류가 나와서 질문드려요,,

0

201

2

안녕하세요. 일전에 질문 드린 포폴 준비 관련 질문의 추가 질문입니다!

0

159

1

[팁] 2024년 기준 버전 이슈?

0

453

1

지금 강의의 유니티 클라를 IOCP 서버와 연동하는 것

0

333

2

PushAfter 사용 질문

0

189

1

강의중 GameRoom의 참조값에 대해 질문드립니다.

0

241

1