מאמרים עם התגית “C#”
31 מאמרים עם התגית “C#”, מהחדש לישן.
-
למה arguments נשברים — כללי command-line arguments ב-Windows
Windows מעביר ל-CreateProcess מחרוזת אחת שהמקבל מפצל. מכסה את כללי CommandLineToArgvW, CRT ו-.NET, ArgumentList, ובניה ב-C++.
-
סיום התמיכה ב-printer drivers של Windows — איך אפליקציות עסקיות מתכוננות להדפסת דוחות ותוויות
Microsoft מפסיקה בהדרגה printer drivers מסוג v3/v4. מה Windows protected print mode מסיר, ואיך עושים inventory ומכינים הדפסת דוחות ותוויות באפליקציות עסקיות.
-
מה נשאר אחרי שה-parent מת — מחזיקים child processes ב-Job Object
למה SDK helpers שורדים UI שנהרג ומחזיקים את המצלמה או את ה-COM port? מתכננים משך חיים של child process עם Job Objects, KillOnJobClose ו-completion ports.
-
Named Pipes בפועל — ה-IPC הסטנדרטי של Windows, מתכנון עד אבטחה
מדריך מעשי ל-Named Pipes, ה-IPC הסטנדרטי ב-Windows. המאמר מסדר לפי מקורות ראשוניים את הבחירה בין byte mode ל-message mode, תכנון server לכמה clients, אבטחה ע...
-
Spurious wakeup — למה condition variable מתעורר בלי notify, ואיך לחכות נכון ב-Windows
Wait של condition variable יכול להתעורר בלי notify (spurious wakeup). למה Windows מתיר זאת, וצורת ה-wait הנכונה עם while ו-predicate ב-Win32, ב-C++ וב-C#.
-
שיטות עבודה מומלצות ל-multithreading בפועל: מהדורת .NET — מה להחליט לפני שמוסיפים threads
כללי תכנון שמונעים מקוד multithreaded ב-.NET/C# לקרוס או להיתקע מדי פעם: להשתמש ב-Task במקום ליצור threads בעצמכם, לצמצם shared mutable state, לשמור משמעת lo...
-
WMI/CIM מ-C# ומ-PowerShell — מדריך מעשי למידע חומרה, ניטור process ושאילתות remote
WMI/CIM הוא הדרך הסטנדרטית לשלוף serial number של מחשב, לנטר דיסק פנוי ולזהות process שהתחיל. המאמר מכסה CIM cmdlets כמו Get-CimInstance, מעבר מ-Get-WmiObjec...
-
מעמקי ה-I/O ב-Windows (פרק 4) — Cache Manager: מתי WriteFile באמת מגיע לדיסק
פרק 4 בסדרה שמסבירה בתרשימים את Cache Manager של Windows. המאמר עובר על מטמון שממומש כמיפוי קובץ, read-ahead ו-lazy writer, הבחירה בין FlushFileBuffers ל-FIL...
-
מעמקי ה-I/O של Windows (חלק 3) — I/O completion ports (IOCP) ו-thread pool של .NET: המרתף שמתחת ל-async/await
חלק 3 בסדרה עם איורים על I/O completion ports (IOCP): איחוד ה-queue עם בקרת מספר ה-threads, ערך ה-concurrency, שחרור ה-threads ב-LIFO וההמשכים ב-.NET.
-
עד מתי אפשר להשתמש ב-MSMQ? ── החלטת ה-migration של תור legacy ש"אפילו לא מוגדר כ-deprecated"
MSMQ לא מופיע ברשימת ה-deprecated הרשמית, אבל System.Messaging קיים רק ב-.NET Framework ומעכב את ה-migration ל-.NET. המאמר מסדר את השמועות על "הפסקת השימוש" ...
-
מעמקי ה-I/O של Windows (חלק 2) — I/O סינכרוני ואסינכרוני: מה OVERLAPPED באמת אומר
חלק 2 בסדרה מסביר בדיאגרמות I/O סינכרוני ואסינכרוני (Overlapped I/O) ב-Windows: המשמעות של FILE_FLAG_OVERLAPPED, ארבע דרכי ההודעה על הסיום, התנאים שבהם פעולה...
-
מעמקי ה-I/O של Windows (חלק 1) — כל קריאה וכתיבה הופכת ל-IRP: התמונה הכוללת של מערכת ה-I/O
חלק 1 בסדרה על ה-I/O של Windows מהיסוד: מרחב השמות של ה-Object Manager, ה-driver ואובייקטי ה-device וה-file, מחזור החיים של IRP, ומה CloseHandle באמת עושה.
-
מהו ה-TPM ב-Windows? — מדריך מאויר ל"כספת שלא מוציאה מפתחות החוצה" ולאתחול מדוד
מדריך מאויר ל-TPM. הוא מכסה מפתחות שלא יוצאים מהשבב, PCR ואתחול מדוד, BitLocker ו-Windows Hello, dTPM, fTPM ו-Pluton, Get-Tpm ומפתחות שחזור.
-
אסור להשתמש בערך שפוענח מקוד QR כמו שהוא — תיקון שגיאות שהצליח אינו מבטיח את הערך
תיקון שגיאות בקוד QR אינו מבטיח שהערך שפוענח נכון. דוגמאות אמיתיות ושני מפענחים שונים מראים כיצד לכלוך יכול להחזיר ערך אחר, ומה מערכת עסקית חייבת לבדוק.
-
להבדיל ב-.NET בין המתנה ל-GC לבין memory leak — תהליך מעשי של תצפית, השוואה והוכחה של גידול בזיכרון
איך מפרידים באפליקציית .NET בין גידול זיכרון שנובע מהמתנה ל-garbage collection לבין memory leak אמיתי, עם dotnet-counters, dotnet-gcdump ו-dotnet-dump.
-
רשימת בדיקה לניהול בטוח של child processes באפליקציית Windows
בניהול בטוח של child processes באפליקציית Windows, בעלות על עץ התהליכים ותהליך הסיום חשובים יותר מבחירת API להפעלה. המאמר עובר על Job Object, הפצת סיום, stdi...
-
Pitfalls באפליקציות serial communication — reconnect ותכנון log
Pitfalls שכדאי להימנע מהן באפליקציית serial לחיבור ציוד ולשליטה במכשירי מדידה: framing, timeout, RTS/CTS, DTR/RTS, reconnect ותכנון log, מזווית מעשית.
-
WinForms, WPF או WinUI — טבלת החלטה מעשית
איך בוחרים בין WinForms, WPF ו-WinUI לפי פיתוח חדש, אפליקציות קיימות, deployment, גמישות UI ומבנה הצוות.
-
מלכודות של shared memory ו-best practices מעשיים
המאמר עובר על המלכודות בשימוש ב-shared memory בשטח, ועל התכנון שמוריד את שיעור התקלות: סנכרון, visibility, lifetime, ABI והרשאות.
-
השוואת ביצועים הוגנת בין C#, C++, Java ו-Go
איך משווים בהגינות את מהירות הריצה של C#, C++, Java ו-Go: תכנון המדידה, warm-up, קיבוע הסביבה, קריאת הסטטיסטיקה, ופריטי benchmark קונקרטיים.
-
איך קוראים ל-DLL של .NET 8 מ-VBA עם טיפוסים: COM host ו-dscom
איך חושפים class library של .NET 8 כ-COM, מייצרים TLB עם dscom, ומשתמשים בו מ-VBA ב-early binding עם טיפוסים.
-
צ'קליסט לפני migration מ-.NET Framework ל-.NET
צ'קליסט מעשי לפני migration מ-.NET Framework ל-.NET: סוג פרויקט, טכנולוגיות לא נתמכות, תלויות NuGet, SDK-style, WPF/WinForms, CI/CD ותפעול.
-
Generic Host ב-.NET — התשתית ל-DI, Configuration ולוגים
Generic Host מרכז DI, Configuration, לוגים, IHostedService ו-BackgroundService במקום אחד. המאמר מסביר מתי הוא באמת עוזר באפליקציית console או worker, ומתי הו...
-
מה זה .NET Native AOT — ההבדל מ-JIT ומ-trimming
מהו Native AOT — לפי ההבדל מ-JIT, ReadyToRun, self-contained, single-file, trimming ו-source generator, וסיכום מעשי של המקרים שמתאימים והמקרים הקשים.
-
שלושה timers ב-.NET — PeriodicTimer, Timer ו-DispatcherTimer
ההבדל בין PeriodicTimer, System.Threading.Timer ו-DispatcherTimer, ואיך בוחרים ביניהם לעיבוד async, callback ב-ThreadPool ועדכון UI ב-WPF.
-
איך קוראים ל-DLL של C# Native AOT מ-C/C++
איך מפרסמים ספריית מחלקות C# כ-DLL native עם Native AOT, וקוראים לנקודות כניסה מסוג UnmanagedCallersOnly מ-C/C++ — לפי מקום השימוש, דפוסי מימוש ונקודות זהירות.
-
למה להכניס Generic Host ו-BackgroundService לאפליקציית desktop ב-.NET
בכלי Windows ובאפליקציות long-running, איך להשתמש ב-Generic Host וב-BackgroundService כדי לרכז הפעלה, עיבוד תקופתי, shutdown, לוג, הגדרות ו-DI.
-
async/await וה-UI thread ב-WPF וב-WinForms
ב-WPF וב-WinForms, לאן חוזר הקוד אחרי await, מתי להשתמש ב-Dispatcher או Invoke, מה ConfigureAwait(false) באמת עושה, ולמה .Result ו-.Wait() יוצרים deadlock.
-
FileSystemWatcher בפועל: miss ו-duplicate
איך משתמשים ב-FileSystemWatcher בזהירות: miss, duplicate, מלכודות בקביעת סיום, rescan, atomic claim ו-idempotency.
-
async/await ב-C#: טבלת החלטה ל-Task.Run ו-ConfigureAwait
איך בוחרים בין I/O wait, חישוב CPU, Task.Run, ConfigureAwait(false) ו-fire-and-forget ב-C# async/await, עם טבלת החלטה.
-
C# מול native DLL: מתי P/Invoke ומתי C++/CLI wrapper
כשקוראים מ-C# ל-native DLL, מתי P/Invoke מספיק ומתי C++/CLI wrapper דק משתלם יותר: ownership, exceptions, טיפוסי C++ ו-callback. סיכום של מבנה עם wrapper דק.