Windows에서 복사 가능한 데이터의 최대 사이즈는?

Windows로 텍스트나 파일을 복사 & 붙여넣기 할 때는 "클립 보드"라고 불리는 영역에 데이터가 저장되는데, 이 클립 보드에 저장할 수 있는 데이터의 최대 크기와 복사 & 붙여넣기의 구조는 어떻게 이루어져 있을까?

 


어떤 사용자가 30만 행이 넘는 거대한 Excel 파일의 셀을 복사 & 붙여넣기 하려고 했는데, 실패했다고....

Windows에서는 클립보드의 내용물을 취득할 때, 함수 "GetipClipboardaData"가 사용되는데, 사용자가 분석한 결과 30만 행 초과 Excel의 파일의 셀을 복사하려고 하면, "GetipClipboardaData"의 실행이 실패한 것으로 나타났다는 것.

이로 인해 사용자는 "Excel의 데이터가 너무 커서 클립보드에 데이터 저장에 실패했다"라고 하면서 인터넷 게시판에 질문을 했다는 것이다.



위 질문에 대해 "Windows에서는 클립보드에 저장 가능한 데이터의 최대 용량을 설정하지 않으면, 저장 가능 데이터 용량은 사용 가능한 메모리 용량에 의존한다"라는 답이 돌아왔다. 게다가 상기 Excel 데이터의 복사 & 붙여넣기 실패는 "클립보드에 저장 가능한 데이터 용량"이 아니라, 다른 원인이 관계하고 있다고 지적.

 


Windows에서 동작하는 어플리케이션이 클립보드에 데이터를 저장하는 방법은 2종류가 있다. 하나는 클립보드에 직접 데이터를 저장하는 방법이고, 다른 하나가 클립보드에는 데이터를 저장하지 않고, "클립보드가 호출될 때 어플리케이션에 데이터의 출력을 요구한다"는 지령을 내리는 방법이다. 후자의 방법은 "지연 렌더링"이라고 불리고 있으며, Excel에서는 리치 텍스트를 복사할 때 지연 렌더링을 이용하고 있다는 것.

Windows는 클립보드 내용물을 가져오는 "GetipClipboardaData"가 실행되었을 때, 데이터가 돌아올 때까지 최대 30초를 대기하지만, 대기시간이 30초를 넘으면 "GetipClipboardaData"에서는 실패를 의미하는 NULL이 돌아온다. 즉, 위 사용자의 경우 Excel 데이터의 크기가 너무 크기 때문에 지연 렌더링에 30초 이상의 시간이 소요되어 복사 & 붙여넣기에 실패했다는 것.