2011-12-14 3 views
1

Azure에서 실행되는 C# 코드가있어 웹을 사용할 수 있으므로 안전해야합니다. 즉, 포인터를 사용할 수 없다는 의미입니다.어떻게 포인터를 사용하지 않고 포인터를 시뮬레이트 할 수 있습니까?

내 데이터 구조는 각 노드가 객체 X 인 SortedList입니다. 각 객체 X는 각 셀이 객체 Y의 다른 SortedList 인 배열을 포함합니다. 유형 X 및 Y의 객체에는 고유 ID가 있습니다. (그래서 그들은 물론 검색 할 수 있습니다).

이제는 X 개체와 Y 개체를 통해 검색하지 않고 Y 개체로 직접 이동하는 방법이 필요합니다. (그것은 수백만 개의 객체 일 수 있습니다.)

C/C++에서는 실제 객체에 대한 포인터가있는 Y 객체 ID 목록을 사용합니다. 그런 식으로는 한 번만 객체를 검색 할 것입니다.

어떻게하면 C#으로이 작업을 수행 할 수 있는지 아이디어가 있으십니까?

감사합니다.

+11

C#에서 포인터가없는 이유는 * 거의 모든 것이 포인터 *입니다. 'MyClass p = a [i];'라고하면,'p'는 포인터입니다. 'a'는 포인터의 배열이고'a [i]'와'p'는 같은 객체를 가리키고 있습니다. 당신이 할 수없는 것은 포인터 연산입니다. –

+0

오오 ... 포인터 목록을 가질 수 있습니다. 그냥 객체로 선언하면됩니다 (초기화하지 않고)? – Roman

+2

http://msdn.microsoft.com/en-us/library/t63sy5hs%28v=VS.100%29.aspx –

답변

1

C++ 솔루션에서와 마찬가지로 인스턴스를 사용하지만 -> C++ 포인터는 deref가 아닙니다. .NET에서 클래스 유형의 인스턴스를 참조하는 모든 것은 실제로 포인터 인 객체 참조입니다. C#에서 유형의 인스턴스를 만들고 변수와 배열 요소에 할당하고 인수로 전달하면 모든 것은 메모리의 동일한 객체 데이터에 대한 포인터입니다.

C#에서 포인터를 시뮬레이트 할 필요가 없습니다. 모든 것은 이미 포인터입니다.

+0

고마워 :) 그게 내가 찾고 있던 대답이야! – Roman

0

잘 해싱 해 볼 수 있습니다. Hashtable 클래스가 있습니다. 모든 레코드가 정렬 된 목록에 있지만 바이너리 검색을 사용할 수 있지만 수백만 개의 레코드로도 오래 걸리지는 않습니다.

귀하의 데이터 구조에 대한 귀하의 설명을 다시 읽는 데 나는이 질문을 가지고 있습니다. 어쨌든 모든 Y의 목록을 개별적으로 저장할 계획이라면 Object X가 Object Y를 저장하는 지점은 무엇입니까? X의 정렬 된 목록을 저장하는 이유는 무엇입니까? 각 X에는 연관된 Y 객체의 ID 목록이 정렬되어 있고 Y 객체의 정렬 된 목록이 별도로 있습니까? 관련 X를 모른 채 Y를 검색 할 수 있다면 객체를 보관할 잘못된 데이터 구조가 생성됩니다. 또는 데이터베이스를 생성하고 SQL을 사용하여 필요할 때 필요할 때 가져올 수 있습니다. 수백만 개의 레코드가있는 것이 좋은 방법 일 수 있습니다.

+0

음, HashTable의 문제는 여러 작업 (주로 LOT 작업) 후에 더 커야 할 필요성입니다. 데이터가 매우 동적이어서 새 HashTable을 생성 할 때마다 매우 나쁜 결과가 발생할 수 있습니다. SQL 정보 - 모든 데이터가 SQL에 저장됩니다. 실시간 데이터 쿼리가 있어야하기 때문에 데이터 구조는 캐시를위한 것입니다. SQL은 내가 원하는 것을하지 않을 것입니다. 나는 당신이 말한 것처럼 그것을 뒤집을 수있다 - 모든 Y 객체를 정렬 된 목록에 저장하고 X 객체에 포인터를 저장한다. 똑같은 것처럼 들리네. – Roman

관련 문제