استفاده از کتابخانه DotNetZip و CPUهای چند هسته‌ای
هرچند از دات نت 4 و نیم به بعد، الگوریتم Zip به صورت توکار پشتیبانی می‌شود، اما برای نگارش‌های پایین‌تر، کتابخانه DotNetZip جزو پرکاربردترین‌‌ها در این زمینه است.
از همین کتابخانه مدتی در یک سرور معمولی بدون مشکل استفاده کرده بودم تا اینکه پس از ارتقاء به سرور جدید با خراب بودن فایل‌های Zip حاصل مواجه شدم. پس از بررسی مشخص شد که این کتابخانه با CPUهای چند هسته‌ای مشکل دارد و باید این نوع پردازش موازی را در آن خاموش کرد:
using (var zf = new ZipFile())
{
   zf.UseUnicodeAsNecessary = true;
   zf.ParallelDeflateThreshold = -1;
   zf.Comment = "….";
   zf.AddFile(path, "programName");
   zf.Save(whereToSave);
}
همانطور که مشاهده می‌کنید، برای غیرفعال سازی پردازش موازی، فقط کافی است پارامتر ParallelDeflateThreshold با منهای یک مقدار دهی شود.
همچنین اگر نام فایل‌های شما فارسی است نیاز است UseUnicodeAsNecessary نیز به true تنظیم گردد.

در کل گاهی از اوقات همین نکات کوتاه می‌توانند از صدمات جدی در آینده جلوگیری کنند. خصوصا اگر از این محصول جهت تهیه پشتیبان استفاده شده باشد.
  • #
    ‫۱۱ سال و ۷ ماه قبل، پنجشنبه ۲۴ اسفند ۱۳۹۱، ساعت ۱۴:۱۶
    موردی که برای من جای سوال دارد این است که چرا بعضی از امکاناتی که معمولا مورد نیاز برنامه نویس هاست، مثل همین zip، اینقدر دیر به صورت توکار در دات نت قرار میگیرد؟ چرا در نسخه‌های قبلی نبود؟ یا اصلا با توجه به فشردگی بالای 7zip چرا به آن توجه نمیشود؟ الان روی اکثر کامپیوترها Winrar نصب است ولی کمتر کسی با 7zip آشناست در حالی که معمولا حجم فابل فشرده شده با آن نصف Winrar است.
    • #
      ‫۱۱ سال و ۷ ماه قبل، پنجشنبه ۲۴ اسفند ۱۳۹۱، ساعت ۱۴:۲۵
      گاهی از اوقات مسایل مجوز استفاده از این الگوریتم‌ها مانع هستند تا مسایل فنی.