2009-07-01 4 views
1

나는 사용자의 컴퓨터에있는 파일 집합이 내 응용 프로그램에 의해 이전에 처리되었는지를 비교적 빨리 확인할 필요가 있습니다. 문제의 앱은 사용자의 파일을 서버에 업로드하고 이전에 파일이 업로드 된 경우 업로드를 건너 뜁니다. 지금까지 내 계획은 파일을 해시 한 다음 서버에 업로드 한 방법의 식별자와 함께 결과를 저장하는 것이 었습니다. 내가 생각하기에 문제는이 데이터를 저장하는 것은 해시의 길이 때문에 상당히 번거로울 수 있다는 것입니다. 나는 지금 약 30-40 개의 파일을 기대하고 있지만, 그것은 두 배나 (가상으로) 세 배까지 될 수도 있습니다.C#에서 파일 집합이 동일한 지 빠르게 판단 할 수 있습니까?

해시를 키로 사용하고 서버 정보를 값으로 사용하여 사전을 사용하여 저장할 수 있습니까? 그런 다음 해당 사전을 App의 Properties.Settings.Default 개체에 저장해야합니다. 그 시스템에 저장하는 것이 타당한가 아니면 거기에 어떤 종류의 문제가 발생합니까? 응용 프로그램의 성격으로 인해 이없고 명의 사용자가 동일한 데이터 집합을 가질 확률이 있으므로 사용자간에 업로드를 비교할 필요가 없습니다. 또한 이러한 유형의 작업에 대해 성능이 어떻습니까? 사용자는 적어도 Pentium-M 1.5GHz 프로세서와 1GB RAM이 있어야합니다.

답변

2

아마도 서버 정보에 따라 사전을 app.config 파일에 넣지는 않겠지 만. 나는 아마 당신이 그것을 어떤 이유로 든 더 문제가되지 않는 한 텍스트 파일에 넣을 것입니다. 그것은 마치 에 대한 데이터가 인 것 같고 응용 프로그램이 인 것보다 응용 프로그램 인 것 같습니다.

성능이 전혀 문제가되지 않아야합니다 - 사전은 단어 수십 또는 수백 개를 제외하고는 수백만 개의 개의 항목으로 여전히 효율적으로 설계되었습니다. 해시 값을 얻기를 참조에서

+0

실제로 app.config 파일에 user.config 파일을 저장하지 않을 예정이었습니다. 귀하의 요점은 좋은 것이지만 나는 그것을 별개로 유지할 것입니다. 풍선에 user.config 파일이 필요하지 않습니다! 사전에 관해서는 저장할 수있는 길이의 키가 있는지 궁금합니다. 만약 내가 해시를 연결했다면 그게 효과가 있겠는가? 그리고 성능면에서 파일 해싱이 걱정됩니다. 랩톱 사용자는 합리적인 기간에이 작업을 수행 할 수 있습니까? – jasonh

+0

해시 연결을 시작할 필요가 없습니다. 각 해시는 상당히 짧으며 사전은 어쨌든 긴 키를 처리 할 수 ​​있습니다. 그리고 예, 랩톱은 해싱을 위해 절대적으로 괜찮습니다 - 대부분의 해시는 상대적으로 계산 상 저렴합니다. 파일을 읽는 것만으로 시간이 많이 걸릴 것입니다. –

+0

나는 중요한 정보를 놓쳤다 고 생각합니다. 파일은 한 세트로 모여서 파일 당 하나의 사전 항목을 만드는 것이 합리적이지 않습니까? – jasonh

1

, 나는 내가 그렇게 당신이 같은 결과를 반드시 각각의 시간을 얻을 같은 해시 값이 좋은 사용

...이 언급 거라고 생각했다. 어딘가에 .GetHashCode() 다른 버전의 .NET간에 동일하지 않습니다, 그래서 영구 상태로 해시 저장할 계획이라면 .GetHashCode()를 피할 것입니다. 한 번에 모두 완료되면 .GetHashCode()는 상황이 동일한 지 비교하는 데 이상적입니다.

해시를 유지해야하는 경우 .NET에서 사용할 수있는 해시 클래스가 있습니다. 나는이 전문가가 아니라는 것을 인정하지만 SHA1에 해싱 방법이 있다고 생각합니다.

+0

파일의 경우 해시는 일반적으로 SHA1, MD5 등을 말하며 GetHashCode()는 아닙니다. 나는 그 OP가 의미했던 것이 확실하다고 생각했다. –

+0

어쩌면 사람들은 그것을 알지 못했지만 어쨌든 나는 그것을 버릴 것이라고 생각했습니다. – Hugoware

+0

네, 정확히 그 뜻이었습니다. 고마워요. :) – jasonh

0

왜 파일 수정 된 DateTime을 비교하지 않습니까? 이를 위해서는 수정 된 날짜를 서버에 저장해야합니다.

+0

나는 그렇게하지 않을 것입니다. 서버에 대한 SCP 액세스 권한이 있지만 네트워크 트래픽을 최소로 유지하고 싶기 때문에 동일한 데이터를 다시 업로드하지 않아도됩니다. 사용자베이스가 커지고 사용자간에 파일 충돌이 불가능할 경우 매우 낭비하기 때문에 서버의 카탈로그를 끌어 내리는 것은 매우 느려질 수 있습니다. – jasonh