내가 아는거/WPF2018.03.08 15:46

이번 건은 내가 바보짓을 한 경우인데, 혹시라도 나같은 사람이 또 있을까? 싶어서 기록합니다.


WPF 프로그래밍을 하다보면 ObservableCollection을 사용하는 경우가 많고, View와 Viewmodel의 바인딩에 편리하게 사용합니다.

그런데, 클래스에 프로퍼티를 만들때도 Collection이 필요하면 습관적으로 ObservableCollection으로 만들었죠.

아무일도 없었습니다.

그런데 성능문제가 있어서 검토하다가 발견한게...

 ObservableCollection OCollection = new ObservableCollection();
 List ListText = new List();
 private void Button_Click(object sender, RoutedEventArgs e)
 {
     for (int i = 0; i < 1000000; i++)
     {
         OCollection.Add(i.ToString());
     }

     for (int i = 0; i < 1000000; i++)
     {
         ListText.Add(i.ToString());
     }
 }

ObservableCollection과 List에 1000000개의 아이템을 넣어봤더니, 속도가 2배정도 차이가 납니다.

필요없는곳에 ObservableCollection을 남발하지 맙시다 ㅜㅜ

Posted by zinzza

프로그래밍 방식으로 .resx 파일 작업한 프로젝트에서 

제목과 같은 오류가 발생하는 경우...


지금 다니는 회사의 경우 해외 개발팀과 협업을 하는데 해외 개발팀에서 작업한 프로젝트에서 

"사용자 지정 도구 ResXFileCodeGenerator가 입력 파일 ***.resx에 대한 출력을 생성하지 못했지만 특정 오류가 기록되지는 않았습니다. " 


라는 오류가 발생. 


오류메세지로 검색해 봤지만 결과가 없었고...

오류메세지를 영어로 검색하기 위해 비주얼 스튜디오를 영문으로 변경해서 빌드한 결과... 빌드가 됨-_-;


정리.

해외 샘플을 받거나 해외 개발팀이랑 협업을 하는 경우, 위의 에러메세지를 만나게 된다면

비주얼 스튜디오 도구->옵션, 환경->국가별 설정 으로 가서 English를 선택 후 빌드하면 해결.



한번 빌드하고 나면 다시 비주얼 스튜디오를 한글로 변경해도 문제 없이 빌드 가능.




Posted by zinzza

이거때문에 오랫동안 개고생.


.net core 2.0 개발을 하다보면 튜터리얼부터 로컬디비를 사용하는 경우가 많은데,

이상하게 dotnet ef , 웹앱에서 DB접속은 문제가 없는데...

VisualStudio 에서 "SQL Server 개체 탐색기"  또는 "SQL Management Studio"으로 

SQLLocalDB에 접속하면 문제가 발생.


오류메세지...
파이프의 다른 끝에 프로세스가 없습니다. Microsoft SQL Server, 오류: 233


개발하는데 문제는 없었기 때문에 짜증은 나지만 해결하려고 하지 않다가 

원인을 찾아서 고치는데 한참 걸려서... 아까워서 기록합니다.


개고생한 원인

보통은 VisualStudio 만 설치하면 SQLLocalDB가 설치되기 때문에 그데로 사용하면 문제가 없는데,

나는 미쳤는지 MSSQL-Express 를 설치했는데..

문제는 이게 localDB를 설치하고, 결국 SQLLocalDB의 버전이 2개가 되면서 문제가 발생.


확인

명령어 프롬프트를 관리자모드로 실행하고 SQLLocalDB 명령어를 이용해서 localDB를 점검해줘야 한다.

참고:

https://docs.microsoft.com/ko-kr/sql/relational-databases/express-localdb-instance-apis/command-line-management-tool-sqllocaldb-exe


C:\sqllocaldb i   

MSSQLLocalDB

ProjectsV13


sqllocaldb i  명령어를 입력하면 localDB 목록이 나옴.


C:\sqllocaldb v

Microsoft SQL Server 2016 (13.1.4001.0)

Microsoft SQL Server 2017 (14.0.1000.169)


sqllocaldb v 명령어를 입력하면 설치된 localDB의 버전이 나옴.

나는 Microsoft SQL Server 2017 (14.0.1000.169) < 이놈이 문제였음.


C:\sqllocaldb i mssqllocaldb

이름:               mssqllocaldb

버전:            14.0.1000.169

공유 이름:

소유자:            ...................

자동 생성:        예

상태:              실행 중

마지막 시작 시간:    2018-02-22 오후 3:17:11

인스턴스 파이프 이름: np:\\.\pipe\LOCALDB#AC37BB33\tsql\query


sqllocaldb i mssqllocaldb 명령어를 이용해서 mssqllocaldb(데이터베이스 이름)의 정보를 보면.

버전이 14.... Visual Studio 2017 기준으로 13이 맞음... 젠장.



해결

VisualStudio 2017 Professional 기준으로 Microsoft SQL Server 2016 LocalDB 을 남겨놓고 모두 삭제하면 됨.

이미 삭제해서 없지만 Microsoft SQL Server 2017 LocalDB 가 있었음.



추가

LocalDB를 삭제했지만, 이미 만들어져있는 MSSqlLocalDB 의 버전이 14.... 이기 때문에 삭제하고 다시 만들어줘야 함.


C:\sqllocaldb p mssqllocaldb

LocalDB 인스턴스 "mssqllocaldb"이(가) 중지되었습니다.


sqllocaldb p mssqllocaldb  "p" 명령어를 이용해서 DB를 멈추고(안멈추면 삭제가 안됨)


C:\sqllocaldb d mssqllocaldb

LocalDB 인스턴스 "mssqllocaldb"이(가) 삭제되었습니다.


sqllocaldb d mssqllocaldb  "d" 명령어를 이용해서 DB를 삭제.

그러면 자동으로 다시 MSSQLLocalDB를 만들어짐.

자동으로 만들어질때 설치된 localDB의 최신버전으로 만들어지기 때문에 위 내용대로 필요없는 버전은 삭제하고 진행해야 함.




Posted by zinzza
내가 아는거/C#2013.12.06 11:17


작업 중 두 List가 같은지 틀린지를 비교해야 할 상황이 발생했다.


이런 경우 


List<string> a = new List<string>();
a.Add("a");
a.Add("b");
a.Add("c");
a.Add("d");

List<string> b = new List<string>();
b.Add("a");
b.Add("b");
b.Add("c");
b.Add("d");
bool same=a.SequenceEqual(b);

이렇게 하면 되는데

내 상황은 {"A", "B", "C"}와 {"C", "A", "B"} 가 같다고 나와야 하는 상황.


아씨... 루프 쫌 돌아줘야겠다... 하던 중 팀장님의 조언으로 쉽게 해결!


List<string> a = new List<string>();
a.Add("d");
a.Add("a");
a.Add("c");
a.Add("b");

List<string> b = new List<string>();
b.Add("a");
b.Add("b");
b.Add("c");
b.Add("d");

a.Sort();
b.Sort();

bool same=a.SequenceEqual(b);


이러~케!



Posted by zinzza
TAG c#, list, 배열, 비교
2013.11.15 10:01

나도 한 두번 본 적있는 트윗에 대한 기사 ㅋㅋㅋㅋ



http://news.kukinews.com/article/view.asp?page=14&gCode=imt&arcid=0005057704&code=41151111


그리고 그에 대한 기사.



Posted by zinzza