2013/01/30

SQLite Memory DB 속도 테스트

SQLite 를 이용하여 데이터를 저장하는데 속도 문제가 고민이 되어 Memory DB를 테스트 해 보았다.



SQLite 를 이용하여 10만개 레코드를 Insert하고 Update 해 보았다.



테스트를 한 시스템은 Intel Core2Quad CPU Q9550 2.83GHz 이다.



결과는 Update는 차이가 없었지만 Memory DB가 SSD에 비해 15배, HDD에 비해 19배 빠른 결과가 나왔다. 
 

MemoryDB 

MemoryDB Insert: 276.685ms

MemoryDB Update: 4.503ms




SSD

SDD 100000 Insert: 4268.289ms

SDD 100000 Update: 4.685ms




HDD

HDD 100000 Insert: 5302.730ms

HDD 100000 Update: 5.745ms



Memory DB를  활용하면 좀 더 빠르게 데이터를 저장할 수 있을 것 같다.



Memory DB에 올려진 데이터는 백업 함수를 이용하면 쉽고 빠르게 파일로 저장할 수 있다.



Memory DB와 File DB를 연 상태에서 아래 코드를 수행하면 된다. 

sqlite3_backup* pBackup = NULL;
watch.Begin();
pBackup = sqlite3_backup_init( pFileDB, "main", pMemDB, "main" );
if ( pBackup )
{
sqlite3_backup_step( pBackup, -1 );
sqlite3_backup_finish( pBackup );
}


<

Original Post : http://neodreamer-dev.tistory.com/695

2013/01/10

C++ 함수 포인터

함수 포인터를 알고는 있었지만 실제 응용을 하려다 보니 막히는 사항이 있어 다시 공부를 좀 하고 정리를 하였다.



함수 포인터를 함수를 가리키는 포인터로 아래와 같은 형식으로 선언한다.

반환형 (*함수포인터이름)(매개변수)



포인터 이름은 C++의 경우 객체의 멤버일 경우 객체까지 선언한다

반환형 (클래스::*함수포인터이름)(매개변수)

// C
int (*ptFunc)(int, int) = NULL;

typedef int (*ptFuncDef)(int, int);
ptFuncDef ptFunc2;


// C++
int (MyClass::*ptMemberFunc)(int, int);
int (MyClass::*ptMemberConstFunc)(int, int) const;

typedef int (MyClass::*ptMemberFuncDef)(int, int);
ptMemberFuncDef ptMemberFunc2;



이렇게 선언된 함수 포인터에 실제 함수의 주소를 할당하여 사용할 수 있다.

// C
int foo(int a, int b) { return a + b; }

ptFunc = foo;
ptFunc = &foo;
ptFunc2 = &foo;

// C++
class MyClass
{
:
public:
int foo(int a, int b) { return a + b; };
int fooConst(int a, int b) const { return a + b; };
}

ptMemberFunc = &MyClass::foo;
ptMemberFunc2 = &MyClass::foo;
ptMemberConstFunc = &MyClass::fooConst;



이러한 함수 포인터는 일반 포인터 변수와 마찬가지로 비교 연산이 가능하다.

그리고 이 함수 포인터에 할당되어 있는 함수를 호출하는 방법은 C형식의 경우 기존 함수 호출방법과 같지만 C++의 경우 객체 생성 방법에 따라 약간 다르다.

// C
int result;
result = ptFunc(1, 2);
result = (*ptFunc)(1, 2);

// C++
MyClass Class;
result = (Class.*ptMemberFunc)(1, 2);
result = (*this.*ptMemberFunc)(1, 2);
result = (this->*ptMemberFunc)(1, 2);

MyClass pClass = new MyClass;
result = (pClass->*ptMemberFunc)(1, 2);



함수 포인터를 특정 함수의 매개변수로 넘기는 방법은 파라메터 입력 부분에 함수 포인터 선언을 해주면 되며 함수내 에서는 포인터 이름으로 해당 함수를 사용할 수있다.


// 함수 포인터를 첫 번째 매개변수로 받는 함수
void RunFuncPtr( int (*ptFunc)(int, int), int a, int b)
{
int result = (*ptFunc)(a, b);
}

//함수 포인터를 매개변수로 받는 함수의 사용 방법
RunFuncPtr( &foo, 1, 2 );



함수 포인터는 또한 특정 함수의 반환 값으로 사용될 수 있다.

아래는 함수 포인터를 반환하는 함수의 선언이다.

int (*getFuncPtr(int a, int b))(int c, int d)
{
:
return &FuncPtr;
}

typedef int (*ptFuncDef)(int, int);
ptFuncDef getFuncPtr2(int c, int d)
{
:
return &FuncPtr;
}



이 함수 포인터는 배열이나 STL의 컨테이너에도 응용하여 사용할 수 있다.<

Original Post : http://neodreamer-dev.tistory.com/694

2013/01/01

IntelliJ IDEA 에 Son of Obsidian Color Scheme 적용하기



개인적으로 Son of Obsidian 이라는 문법 강조 색을 좋아한다. 그래서 어느 개발 툴이던지 Son of Obsidian을 적용하여 사용하고 있는데 이번에 테스트 한 IntelliJ에도 Son of Obsidian를 적용 가능한지 찾아 보았는다. 잘 알려진 Color Scheme이라서인지 어렵지 않게 찾을 수 있었다.


http://www.aremaitchconsulting.com/2011/02/color-schemes-for-intellij-idea/

위 웹사이트를 접속하면 방법을 찾을 수 있다.

작성자가 이미 Son of Obsidian을 IntelliJ에 적용할 수 있도록 설정파일을 만들어 공개하였다. 위 사이트에서 SonOfObsidian.zip파일을 다운 받아서 IntelliJ 의 Color을 설정 경로에 풀어 놓고 IntelliJ를 기동하여 Son Of Obsidian 를 선택만 하면 된다.

IntelliJ 의 색상 설정 경로는 %USERPROFILE%\.IdeaIC12\config\colors 이다. 계정이 IntelliJ 일 경우 운영체제가 C드라이브에 설치된 경우 C:\Users\IntelliJ\.IdeaIC12\config\colors 이다.




<

Original Post : http://neodreamer-dev.tistory.com/693

IntelliJ IDEA 12로 안드로이드 개발하기 - Hello Android

2013/01/01 - [Dev Story] - IntelliJ IDEA SDK 설정하기


IntelliJ 를 사용하게된 이유가 안정정이고 빠른 Java 개발 IDE로 알려졌기 때문이기도 하지만 Android 개발을 지원한다는 것이 더 큰 이유이다.


다행스럽게도 JetBrains에서 제공하는 IntelliJ 의 두 버전(Ultimate Edition, Community Edition) 모두 안드로이드 개발을 지원한다.


언어를 처음 접할 때 실습하는 Hello World 유사하게 Hello Android 를 작성하여 보았다.


우선 IntelliJ 시작하여 "Create New Project"메뉴를 선택한다.



"New Project" 메뉴에서 프로젝트의 이름과 경로를 설정하고 프로젝트에 사용 될 Android SDK 버전을 설정한 후 다음 단계로 넘어간다.



Package 이름과 Activity를 설정하고 대상 장치를 설정한다. 설정 후 완료 버튼을 누른다.



아래 화면은 설정을 마치고 난 후의 IntelliJ의 프로젝트 화면으로 필요한 파일들이 생성된 모습니다.



아무런 수정 없이 메인 메뉴의 시작 버튼을 눌러 프로그램을 시작해 보았다.



프로그램을 시작하면 설정된 Emulator가 시작되지 않았을 경우 이를 실행하고 프로그램을 동작 시킨다.

아래 화면은 프로그램이 실행된 Emulator의 화면이다.



프로그램 작성은 Eclipse 크게 다르지 않으면 누구나 쉽게 할 수 있는 것 같다. 하지만 안드로이드 개발에 있어 Eclipse 보다 빠르고 안정적인지 보다 다양한 기능을 제공하는지는 좀 더 사용을 해 봐야 알 수 있을

Original Post : http://neodreamer-dev.tistory.com/692

IntelliJ IDEA SDK 설정하기



Java를 사용하는 경우는 안드로이드 공부를 할 때 밖에는 없지만 eclipse가 많이 느려서 빠르고 안정적인 Java 개발환경이라고 하는 IntelliJ 는 어떤 환경일지 궁금해서  설치를 해 보았다.



IntelliJ는 무료로 사용할 수 있는 Community Edition과 비용을 지불해야하는 Ultimate Edition으로 나뉘어 있으며 두 버전 모두 홈페이지에서 다운로드 받을 수 있다. 현재 최신 버전은 v12 이다.



개인적으로 설치형 프로그램을 그리 좋아 하지 않아 이번에도 가상 PC에 설치한 후 설치된 파일을 호스트 PC로 옮겨서 사용을 하였다.



처음 기동후 프로젝트를 만들어도 정상적인 프로젝트가 만들어지지 않았다. SDK설정이 되어있지 않아서 발생한 문제로 보였다. 기동후 SDK를 설정한 후 프로젝트를 생성하면 문제가 없었다



IntelliJ를 처음 기동할 때 설정할 수 있고 나중에도 설정이 가능하다. 아래 방법은 IntelliJ를 처음 기동할 때 설정하는 방법이다.



IntelliJ 처음 기동하는 화면에서 Configure 메뉴의 Project Default 하위 메뉴의 Project Structure 메뉴를 선택한다.





Project Structure 대화상자에서 좌측 메뉴의 Project를 선택하고 Project SDK 항목의 New... 버튼을 클릭하여 JDK메뉴를 선택하고 시스템에 설치되어 있는 JDK 경로를 설정한다.





안드로이드 개발을 위해서 같은 방법으로 Android SDK 경로를 설정하고 원하는 플랫폼 버전을 선택한다.



 

이제 IntelliJ 를 실행하면 설정된 SDK를 기반으로 프로젝트를 생성하게 된다.&

Original Post : http://neodreamer-dev.tistory.com/691

2013년 새로운 시작이다.

2012년에는 열심이 공부도 하고 블로그에 글도 많이 쓰기로 맘은 먹었지만 사는게 바쁘다는 핑계로 그렇지 못 한 한해를 보낸 것 같다.


새로운 해를 맞이하여 다시 시작해야겠다.&

Original Post : http://neodreamer-dev.tistory.com/690