[
  {
    "Id": "679735",
    "ThreadId": "274690",
    "Html": "\r\n<p>I have to use ZipEntry with task parallel library</p>\r\n<p>First I were looking fro clone or copy method of ZipEntry class but didn't found</p>\r\n<p>Problem is that i am looping around ZipEntries and want's to call parallel task on each Zip entry.But looks like the reference is some how mixed</p>\r\n<p>My code is some thing like</p>\r\n<p>&nbsp;</p>\r\n<div style=\"color:black; background-color:white\">\r\n<pre>NineOneParser objParser = <span style=\"color:blue\">null</span>;\r\n            List&lt;Task&gt; taskHandles = <span style=\"color:blue\">new</span> List&lt;Task&gt;();\r\n\r\n            <span style=\"color:blue\">using</span> (ZipFile objZip = <span style=\"color:blue\">new</span> ZipFile(ObjMailDatLists.LevelOneValidatedFilePath))\r\n            {\r\n                objParser = <span style=\"color:blue\">new</span> NineOneParser();\r\n                <span style=\"color:blue\">foreach</span> (ZipEntry ze <span style=\"color:blue\">in</span> objZip.Entries)\r\n                {\r\n                    <span style=\"color:blue\">if</span> (ze.FileName.ToLower().EndsWith(<span style=\"color:#a31515\">&quot;.hdr&quot;</span>))\r\n                    {\r\n                        taskHandles.Add(Task.Factory.StartNew(() =&gt;\r\n                                                                  {\r\n                                                                      ZipEntry zeToBeProcessed = ze;\r\n                                                                      LoggingHandler.Log(<span style=\"color:#a31515\">&quot;hdr started parsing completed&quot;</span>, EnumLogTypes.Verbose);                                                                     \r\n                                                                      ObjMailDatLists.HDRList = objParser.GetHDRList(zeToBeProcessed, ObjMailDatLists.ObjImportJobInfo);\r\n                                                                      ObjMailDatLists.HDRFileName = zeToBeProcessed.FileName;\r\n                                                                      LoggingHandler.Log(<span style=\"color:#a31515\">&quot;HDR parsing completed&quot;</span>, EnumLogTypes.Verbose);\r\n                                                                  }));\r\n\r\n                    }\r\n                    <span style=\"color:blue\">if</span> (ze.FileName.ToLower().EndsWith(<span style=\"color:#a31515\">&quot;.seg&quot;</span>))\r\n                    {\r\n                        taskHandles.Add(Task.Factory.StartNew(() =&gt;\r\n                                                                 {\r\n                                                                     ZipEntry zeToBeProcessed = ze;\r\n                                                                     LoggingHandler.Log(<span style=\"color:#a31515\">&quot;seg started parsing completed&quot;</span>, EnumLogTypes.Verbose);                                                                     \r\n                                                                     ObjMailDatLists.SEGList = objParser.GetSEGList(zeToBeProcessed, ObjMailDatLists.ObjImportJobInfo);\r\n                                                                     ObjMailDatLists.SEGFileName = zeToBeProcessed.FileName;\r\n                                                                     LoggingHandler.Log(<span style=\"color:#a31515\">&quot;seg parsing completed&quot;</span>, EnumLogTypes.Verbose);\r\n                                                                 }));\r\n                    }\r\n                    <span style=\"color:blue\">if</span> (ze.FileName.ToLower().EndsWith(<span style=\"color:#a31515\">&quot;.mpu&quot;</span>))\r\n                    {\r\n                        taskHandles.Add(Task.Factory.StartNew(() =&gt;\r\n                                                                 {\r\n                                                                     ZipEntry zeToBeProcessed = ze;\r\n                                                                     LoggingHandler.Log(<span style=\"color:#a31515\">&quot;mpu started parsing completed&quot;</span>, EnumLogTypes.Verbose);                                                                                                                                         \r\n                                                                     ObjMailDatLists.MPUList = objParser.GetMPUList(zeToBeProcessed, ObjMailDatLists.ObjImportJobInfo);\r\n                                                                     ObjMailDatLists.MPUFileName = zeToBeProcessed.FileName;\r\n                                                                     LoggingHandler.Log(<span style=\"color:#a31515\">&quot;mpu parsing completed&quot;</span>, EnumLogTypes.Verbose);\r\n                                                                 }));\r\n                    }  <br>                    ..............//in real i have about 15 odd files    <br>                  \r\n                }\r\n                <span style=\"color:blue\">foreach</span> (Task t <span style=\"color:blue\">in</span> taskHandles) { t.Wait(); }\r\n                LoggingHandler.Log(<span style=\"color:#a31515\">&quot;All parsing completed&quot;</span>, EnumLogTypes.Verbose);\r\n                objZip.Dispose();\r\n            }\r\n            objParser = <span style=\"color:blue\">null</span>;\r\n</pre>\r\n</div>\r\n<p>&nbsp;</p>\r\n<p>While the method on each entry looks like</p>\r\n<p>&nbsp;</p>\r\n<div style=\"color:black; background-color:white\">\r\n<pre><span style=\"color:blue\">public</span> List&lt;HDR&gt; GetHDRList(ZipEntry ze, ImportJob objJob)\r\n        {\r\n            List&lt;HDR&gt; objList = <span style=\"color:blue\">new</span> List&lt;HDR&gt;();\r\n            <span style=\"color:blue\">using</span> (BufferedStream buffer = <span style=\"color:blue\">new</span> BufferedStream(ze.OpenReader()))\r\n            {\r\n                <span style=\"color:blue\">using</span> (StreamReader reader = <span style=\"color:blue\">new</span> StreamReader((buffer), Encoding.ASCII))\r\n                {\r\n                    HDR obj = <span style=\"color:blue\">null</span>;\r\n                    <span style=\"color:blue\">string</span> line = String.Empty;\r\n                    <span style=\"color:blue\">int</span> recordID = 0;\r\n                    <span style=\"color:blue\">while</span> ((line = reader.ReadLine()) != <span style=\"color:blue\">null</span>)\r\n                    {\r\n                        <span style=\"color:blue\">if</span> (line.Trim().Length &gt; 0)\r\n                        {\r\n                            recordID&#43;&#43;;\r\n                            obj = <span style=\"color:blue\">new</span> HDR();\r\n                            obj.IdeAllianceVersionOfJobInBaseClass = objJob.imjIdeAllianceVersion;\r\n                            obj.JobID = line.Substring(0, 8).Trim().Length == 0 ? String.Empty : line.Substring(0, 8).ToLower();<span style=\"color:green\">//casesensitivecheck</span>\r\n                            obj.IDEAllianceVersion = line.Substring(8, 4).Trim().Length == 0 ? String.Empty : line.Substring(8, 4);\r\n                            obj.HeaderHistorySequenceNumber = line.Substring(12, 4).Trim().Length == 0 ? String.Empty : line.Substring(12, 4);\r\n                            obj.HeaderHistoryStatus = line.Substring(16, 1).Trim().Length == 0 ? String.Empty : line.Substring(16, 1).ToUpper();\r\n                            obj.SystemGeneratedJobID = objJob.JobID;\r\n                            obj.RecordRowNumber = recordID;\r\n                            objList.Add(obj);\r\n                            line = <span style=\"color:blue\">null</span>;\r\n                            obj = <span style=\"color:blue\">null</span>;\r\n                        }\r\n                    }\r\n                    reader.Close();\r\n                    reader.Dispose();\r\n                }\r\n                buffer.Close();\r\n                buffer.Dispose();\r\n            }\r\n            <span style=\"color:blue\">return</span> objList;\r\n        }<br>Problem is that ZipEntries are mixing and wrong list got wrong entry<br>Any help on it <br></pre>\r\n</div>\r\n<p>&nbsp;</p>\r\n<p>&nbsp;</p>\r\n",
    "PostedDate": "2011-10-04T04:32:30.59-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "680333",
    "ThreadId": "274690",
    "Html": "<p>You cannot use multiple threads on a single ZipFile instance.</p>\r\n<p>in other words: Don't do what you are doing.</p>",
    "PostedDate": "2011-10-05T09:18:48.517-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "681948",
    "ThreadId": "274690",
    "Html": "<p>Hmmm,</p>\r\n<p>Any Idea Cheeso (Geek) how to improve it via parallelism?</p>",
    "PostedDate": "2011-10-09T23:41:37.29-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "682232",
    "ThreadId": "274690",
    "Html": "<p>What are you trying to improve?&nbsp; Are you trying to improve the library, or improve <em>your use of </em>the library?</p>\r\n<p>And in what way? What is the goal?</p>",
    "PostedDate": "2011-10-10T12:31:09.62-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "682303",
    "ThreadId": "274690",
    "Html": "<p>Hi all. I try to use this code and found it faster then the same without AsParallel extension method:</p>\r\n<p>\r\n<div style=\"color: black; background-color: white;\">\r\n<pre>ParallelQuery&lt;ZipEntry&gt; ze = <span style=\"color: blue;\">null</span>;\r\n            <span style=\"color: blue;\">using</span> (ZipFile zf = <span style=\"color: blue;\">new</span> ZipFile(<span style=\"color: #a31515;\">@\"G:\\test\\myFile.zip\"</span>)) {\r\n                ze = zf.SelectEntries(<span style=\"color: #a31515;\">\"*.*\"</span>).AsParallel&lt;ZipEntry&gt;();\r\n            }\r\n\r\n            <span style=\"color: blue;\">foreach</span> (ZipEntry z <span style=\"color: blue;\">in</span> ze) {\r\n                z.Extract(<span style=\"color: blue;\">new</span> FileStream(<span style=\"color: #a31515;\">@\"G:\\temp\\\"</span> + z.FileName, FileMode.Create, FileAccess.Write));\r\n            }\r\n</pre>\r\n</div>\r\n</p>",
    "PostedDate": "2011-10-10T14:17:50.12-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "694888",
    "ThreadId": "274690",
    "Html": "<p>I think that ideally you want to overlap I/O with decompression and parsing, so while reading one file from the archive you're decompressing/parsing another previously read one.</p>",
    "PostedDate": "2011-11-07T11:59:31.54-08:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "694981",
    "ThreadId": "274690",
    "Html": "<p>yes, that would make sense.</p>",
    "PostedDate": "2011-11-07T14:29:13.147-08:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  }
]