2013-02-21 4 views
0

아마도이 코드는 중복입니다. (그러나 Parallel.Foreach에서 binnaryformatter를 사용하는 샘플 코드를 찾지 못했습니다. 누구든지 샘플을 제공 할 수 있습니까? 샘플 문제의 코드Parallel.ForEach의 이진 직렬화/비 직렬화 (BinaryFormatter)

Parralel.ForEach(files, fileCurr=> 
        { 
         using(lib.Accesser("fileType", fileNameSpec)) 
         { 
         LoadFileData(fileNameSpec,fileCurr,cancellationToken, progressCallback); 
         } 
        }); 
and 

LoadFileData(fileNameSpec,fileCurr,cancellationToken, progressCallback) 
{ 
using(lib2.load(fileCurr.name)) 
{ 
foreach(var v in fileCurr.include) 
{ 
    var objectForSerialization = loadObj(v); 
    //my code goes below 
    System.IO.Stream stream = System.IO.File.Open("J:\\volume", FileMode.OpenOrCreate); 
        System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bformatter = new BinaryFormatter(); 
        bformatter.Serialize(stream, objectForSerialization); 
        stream.Close(); 
    //but this fil will be locked by multyply writes 

} 
} 
} 
+1

병렬 처리에서 serialization 및/또는 deserialisation이 문제가되는 이유가 있습니까? 예를 들어 동일한 처리 대기열에있는 다른 개체의 속성에 종속되어 있습니까? 무엇을 시도 했습니까? 몇 가지 예제 코드를 볼 수 있습니까? –

+0

어디에 문제가 있습니까? 어떤 예외? serialize (xx)와 같은 Methode에 직렬화 코드를 넣고 병렬 forearch에서 thius를 호출하십시오. 그냥 리소스가 없다는 것을 확인하십시오. –

+0

다중 형식으로 파일에 글을 씁니다. (간단한 샘플을 읽고 쓰는 방법을 묻습니다. – curiousity

답변

1

한 부분은

읽기와 쓰기 또는 병렬로 동일한 파일에 여러 쓰기를 실행하기가 현실적으로 불가능하다는 것이다.

파일 읽기/쓰기에 대한 잠금 메커니즘을 구현하면 조작 을 병렬로 실행할 수 없으므로 더 이상 반복을 실행할 필요가 없습니다..

(파일을 읽는 것만)을 deserialising하는 경우 다른 이야기입니다.

읽기 전용 액세스는 sed마다 파일을 잠그지 않아도되므로 병렬로 수행 할 수 있습니다.

볼 : 당신이 할 수 How can I read a text file without locking it?

또 다른 한가지는, (이 가능한 경우) 텍스트 파일을 미리로드하고 결과 문자열에서 직선을 deserialise된다.

:: 편집 :

많은 것은

하나

당신은 항상 당신의 J: 드라이브에 동일한 파일에 쓰는 것으로 나타

(파일이없는 확장자를 가진 volume라고도 함).

여러 개체를 serialising하는 경우, 당신은 그들이 다른 파일로 직렬화 할 것입니다 ...

모든 객체가 다른 파일에 직렬화하도록 자신을 보장 할 수 있다면, 당신은 을 만들 수 있습니다 병렬 작동.

이이 같은가 someting 것 :

System.IO.Stream stream = System.IO.File.Open("J:\\volume\\" + GenerateFileName(v), FileMode.OpenOrCreate); 

다음 확인 GenerateFileName이 문자열로 고유 한 파일 이름을 생성합니다.

+0

명확한 답변을 해 주신 Timothy 씨께 감사드립니다.이 문제는 "objectForSerialization" 이 장소에서만 생성됩니다. (그리고 다른 기능으로 전달되지 않습니다. 어떻게 생각하세요? 내 상황에서이 개체를 직렬화 할 수 있습니까? – curiousity

+0

그것은'objectForSerialization' 타입이 무엇인지 또는'loadObj (v)'에서 정확히 무엇이 발생했는지 알 수 없기 때문에 알기가 어렵습니다. –

+0

한가지 더 알아 봤습니다. 업데이트 된 답변을보세요. –