2012-07-16 2 views
2

장시간의 시계와 이것이 내 첫 번째 게시물이므로 제발 쉽게 가십시오. 둘러 보았지만 쿼리가 매우 구체적이어서 다른 곳에서는 찾을 수 없습니다.사전 저장 및로드 중. 메모리 풋 프린트 개선

2 개의 컨트롤로 구성된 애플리케이션이 있습니다.

  • 왼쪽의 컨트롤에는 XML 파일에서 매핑 된 검색을 표시하는 트리보기가 포함되어 있습니다. 각 검색에는 연결된 GUID가 있습니다.
  • 오른쪽의 컨트롤은 DataGrid를 표시합니다. 그 정보는 Dictionary (Guid < -> Dataset)를 통해 트리 뷰에서 가져옵니다.

사용자가 트리 뷰에서 노드를 클릭하면 내 응용 프로그램이 검색이 연결된 GUID를 처리하고 병합되고 데이터 격자에 표시되는 관련 데이터 집합을 표시합니다.

응용 프로그램을 종료하거나로드 할 때 사전을 저장 (직렬화)하고로드 (병렬화)합니다.

나는 최근에 메모리 프로파일 링을했는데, 더 큰 검색을하기 위해서는 사전 정렬이 필요한 사용자 기계의 제한된 용량을 위해 사전의 메모리 공간이 상당히 커질 수 있습니다 (200MB).

나는 이것을 달성하는 방법을 누군가가 알고 있는지 궁금해하고있었습니다.

필자는 Serialisable Dictionary를 구성 데이터 집합으로 분할하고 하드 드라이브에 개별적으로 파일 이름으로 GUID를 저장하는 방법에 대해 생각해 보았습니다. 저장된 데이터 집합은 각 Node.Click 이벤트와 함께 deserialised되고 그리드보기에 표시됩니다. 이 문제는 이전 검색을 저장하고 새 검색을로드 할 때마다 각 클릭 이벤트 사이에 잠시 멈추는 문제가 있습니다.

+0

코드를 표시 할 수 있습니까? – Enigmativity

+0

어떤 코드를보고 싶습니까? Enigmativity? 응용 프로그램의 여러 측면을 다루는 꽤 많은 비트가 있습니다. – Raza

+0

당신의 질문에 무엇이 일어나고 있는지를 보여주는 코드. 코드의 본질을 볼 수 있다면 더 나은 도움을 줄 수있을 것입니다. – Enigmativity

답변

1

간단한 대답은 사전과 데이터 집합을 Sqlite 파일로 던지십시오. (또는 다른 db) 조금 느려질 것이지만 나는 합리적인 시간 내에 코드를 넘겨 줄 수있는 코드보다 더 빠를 것이라고 기대한다. 정확하게 사용된다면 db 레이어는 메모리 버퍼링과 캐싱을 수행하여 UI를보다 반응 적으로 만듭니다.

+0

.NET의 경우 SQL Server Compact를 사용하는 것이 좋습니다. 하지만 참고하시기 바랍니다, 당신은 큰 사전에 대해 여기에서 알 수 있습니다 : http://stackoverflow.com/questions/5517320/how-can-i-use-a-very-large-dictionary-in-c – Arithmomaniac

+0

왜 내가 데이터 집합 데이터베이스에 대한 스냅 샷을 추출하여 해당 시점의 데이터를 표시 할 수있게하는 것이 었습니다. 내가 생각하는 데이터베이스에서 타임 스탬프를 사용하여이 문제를 해결할 수 있습니다. 연고에서 다른 플라이는 사용자가 외부 소스에서 데이터 세트로 열을 가져올 수 있다는 것입니다. 응용 프로그램을 종료 할 때 데이터베이스를 업데이트/삽입 할 때 어떻게해야합니까? – Raza

+0

죄송합니다. 제 질문에 대답하고 있습니다. 사용자 정의 열을 사용하는 방법을 알아 냈습니다. 답해 주셔서 대단히 감사합니다. 이 자료는 저에게 매우 귀중한 자료입니다. 데이터베이스를 리소스로 사용하고 런타임에 검색 매개 변수를 구성합니다. – Raza

관련 문제