svn checkout 시 http://192.168.0.2/project_name 처럼 해놓았을 때...
svn server 가 설치된 pc 의 ip 가 변경되면 사용하는 모든 working copy 에 대해 TortoiseSVN -> Relocate 를
하여 변경된 ip 로 바꿔주어야 한다. working copy 가 많으면 아주 많이 귀찮다... ㅡㅡ^
귀찮은 건 딱 싫은데...

[해결 Tip]
svn checkout 시 http://svn_server/project_name 이런식으로 서버의 domain name 으로 한다.
domain name 은 다음과 같이 client pc 의 특정 파일을 메모장 등의 에디터로 열어 등록해놓으면 된다.

linux : /etc/hosts
windows(2000/xp) : /windows/system32/drivers/etc/hosts

ex) /window/system32/drivers/etc/hosts
 192.168.0.2            svn_server

이제는 server ip 가 바뀌었을 때 hosts 파일의 ip 만 변경해주면 된다~~

-- <Mysql>
 
- MyISAM
Buffer pool 이 없어서 OS자체의 buffer cache 를 사용하며 OS 의 flush 메커니즘에 따라서 디스크에 쓰게된다.
MyISAM의 경우 Key_buffer 나 record_buffer, sort_buffer외에도 OS의 버퍼 캐시를 위해 충분한 메모리를 남겨 놓아야하겠습니다.
OS의 버퍼 캐시는 OS가 자동으로 사이즈를 동적으로 할당하며 free 명령어로 상태를 확인할 수 있습니다.


- InnoDB
InnoDB는 오라클처럼 별도의 데이타를 위한 읽기 쓰기 버퍼 메모리를 가지고 있으며, 그것이 innodb_buffer_pool_size입니다.
innodb_buffer_pool_size는 색인과 데이타에 대한 Cache 데이타를 가지고 있습니다.
그래서 MyISAM처럼 Key_buffer가 필요 없는겁니다.
보통 우리가 SQL쿼리로 질의를 수행하면 DBMS는 먼저 이 buffer_pool에서 데이타를 검색하고 없을 경우 디스크에서 읽어서 buffer_pool에 올려놓으며 이것을 \물리적인 읽기\ 라고 합니다.
반면에 이미 buffer_pool에 데이타가 존재하여 디스크를 직접 읽지 않아도 되는 경우를 \논리적 읽기\라고 합니다.
당연히 논리적 읽기가 더 빠르므로 buffer_pool의 사이즈를 크게 설정할 수록 유리합니다.
그러나 무한정 크기를 늘릴 경우 스와핑을 유발할 수 있으므로 자신의 현재 메모리에서 계산하여야 합니다. 적당한 사이즈는 자신의 메모리의 50%-80%입니다.
참고로 x86머신에서는 이 innodb_buffer_pool_size 를 2G이상 설정할 수없으니 참고 바랍니다.


-- <File>

방법들을 아래에 나열하겠습니다.

1) fopen()
c : 현재 파일에 대해 commit-to-disk 기능을 활성화한다.
ps. fflush() 는 commit-to-disk 값에 영향을 받는다.
(commit-to-disk 의 여부에 따라 disk 에 바로 쓰기가 되지 않을 수도 있다는 말?)

2) commode.obj 라이브러리를 링크한다.
commode.obj 가 링크되면 모든 파일에 대해 commit-to-disk 가 활성화 되는걸로
보여진다. ( fopen 시 'c' 옵션을 주지 않아도 되나? )

3) open

O_SYNC : 쓰기시 실제 쓰기가 완료될 때 까지 기다립니다. 즉, 물리적으로 쓰기 완료시에 복귀하게 됩니다.

O_DIRECT(since Linux 2.4.10) : 캐시사용을 최소화 하는듯 합니다. 일반적으로 이 옵션을 쓰면 퍼포먼스 저하가될 수 있지만 필요할 때가 있을듯 합니다.

4) fsync

파일단위의 데이터를 디스크에 동기화 시킨다. fflush 함수는 파일스트림에 대한 사항이고, fsync 는 파일디스크립터에 대한 사항입니다.

(파일단위 작업을 완료하고 디스크에 동기화 하는 방식으로 자주 쓰이는 함수입니다.)

5) sync

모든 파일에 대해 데이터를 디스크에 동기화 시킨다.(프로그램 종료시 등에서는 써볼만 할 듯 합니다.)


텍스쳐를 비디오 메모리에 올릴 때

비록 이미지가 2의 승수가 아니더라도

비디오 메모리에 올라가는 텍스쳐의 Size는 2의 승수로 올라감을 확인했다.

그러므로 비디오 메모리로 올릴 이미지들을 되도록이면 2의 승수에 맞추는 것이 효과적일 것이다.


*위의 내용이 모든 그래픽카드에 적용되는 지는 확인해보지 못했다.


텍스쳐를 MANAGED 로 했을 시 SYSTEM에 위치하고 디바이스에서 접근할 수 있는

메모리공간(Video Memory가 여유있다면 Video에 생성되고 여유가 없다면 시스템메모리를 사용한다.)

이 메모리공간이 만들어지는 시기는 랜더링 할 때 이다.

 

그러므로 처음 그려지는 텍스쳐(MANAGED)의 양이 많아질 때 게임이 버벅거림이 나타난다.

이 문제를 해결하기 위한 방법은 다음과 같다.

 

- 초기화 및 로딩 단계에서 해당 텍스쳐를 한번씩 랜더링하기.

'Programming > DirectX' 카테고리의 다른 글

텍스쳐를 비디오메모리에 올릴 때의 주의사항  (0) 2009.12.02




x = cos(Θ) * r
y = -sin(Θ) * r


'Programming > Math' 카테고리의 다른 글

삼각함수  (0) 2010.07.09
가속도 공식  (0) 2010.03.17
두점의 각도 구하기  (0) 2009.12.02



dx = x2 - x1
dy = y2 - y1

tanΘ = dy/dx
Θ = atan(dy/dx)

'Programming > Math' 카테고리의 다른 글

삼각함수  (0) 2010.07.09
가속도 공식  (0) 2010.03.17
원 그리기  (0) 2009.12.02

ProjectA 라는 프로젝트가 있고 LibA 라는 라이브러리가 있고,
둘다 버전관리를 svn 으로 하고 있다고 가정해보자.

아마도 머지않아 ProjectA 에서 LibA 를 사용하고 싶을 때가 있을것이다.
(LibA 가 너무 편하고 익숙했던거지... ㅎㅎ)
svn에는 이럴 때 사용할 수 있는 svn:externals 란 기능이 있다.

- svn:externals 기능을 쓰지 않는 경우
d:/Work/ProjectA/include/LibA 라고 만들고 LibA 에 있는 실제 파일들을 복사해서 넣고
ProjectA 의 svn 에 해당 폴더를 Add 한다.
결과 : svn/ProjectA 에 LibA 의 파일들이 추가된다.

- svn:externals 기능을 쓰는 경우
ProjectA/include 에서 svn:externals 명령을 통해 LibA/include 의 svn 경로를 지정한다.
결과 : svn/ProjectA 에 LibA 의 파일들이 추가되지 않는다. 단지 연결만되어 있는 것이다.


############### svn:externals 사용법 ############
* windows 환경 :
-. d:/Work/ProjectA/include 폴더 속성
-. Subversion 탭 선택->속성
-. 새로만들기
-. 속성이름 콤보박스에서 svn:externals 선택
-. 속성 값
    //svn_server_ip:port_number/rep/LibA/include/LibA LibA
-. svn update 하면 d:/Work/ProjectA/include/LibA 가 생성된다.

* linux 환경
-. /work/ProjectA/include 폴더로 change directory 한다.
-. 다음과 같이 입력하면 편집기가 열릴것이다. (주의 : '.' 까지 친다)
   svn propedit svn:externals .
   편집기에 다음과 같은 형식으로 입력한다.
   LibA http://svn_server_ip:port_number/rep/LibA/include/LibA
-. svn update 하면 /work/ProjectA/include/LibA 가 생성된다.
####################################################

기본적인 사용법만을 다루었으니 좀 더 많은 기능을 원한다면 google 에게 물어보자.

+ Recent posts