Aplikasi C# Multi-Threading dengan Panggilan Pangkalan Data SQL Server
Apabila bekerja dengan set data yang besar dalam pangkalan data SQL Server, multi-threading boleh bertambah baik dengan ketara prestasi. Walau bagaimanapun, satu cabaran biasa ialah mengelakkan kebuntuan apabila mengakses dan mengubah suai data secara serentak.
Latar Belakang
Senario yang disediakan melibatkan aplikasi satu benang yang memproses rekod dalam " jadual utama" dan jadual "kanak-kanak" yang berkaitan, melaksanakan kemas kini dan sisipan berdasarkan kriteria yang kompleks. Walaupun pendekatan ini berkesan, ia boleh memakan masa untuk set data yang besar. Untuk meningkatkan prestasi, penyelesaian yang dicadangkan bertujuan untuk menyelaraskan pemprosesan menggunakan berbilang urutan.
Pendekatan Asal
Pendekatan awal cuba mencipta konteks data baharu untuk setiap kelompok rekod daripada jadual "utama". Walau bagaimanapun, ini membawa kepada kebuntuan apabila benang memijak jari kaki satu sama lain, cuba menambah atau mengemas kini rekod yang sama secara serentak.
Berbilang Benang dengan Pustaka Selari Tugas
Kepada menangani isu kebuntuan dan meningkatkan prestasi, adalah disyorkan untuk memanfaatkan Perpustakaan Selari Tugas (TPL) dan menggunakan pendekatan yang lebih terpusat untuk mengendalikan capaian data. Begini cara ini boleh dilaksanakan:
using (var dc = new TestDataContext()) { // Get all the ids of interest. // ... var problematicIds = new List<ErrorType>(); // Use TPL's Parallel.ForEach() to process ids in parallel. Parallel.ForEach(ids, new ParallelOptions {MaxDegreeOfParallelism = 8}, id => CalculateDetails(id, problematicIds)); }
Dalam kod ini, kaedah CalculateDetails dipanggil untuk setiap id secara selari, tanpa memerlukan berbilang konteks data. Ini meminimumkan risiko kebuntuan.
Pengendalian Kebuntuan
Untuk mengambil kira kemungkinan kebuntuan yang disebabkan oleh faktor seperti indeks tidak mencukupi atau konkurensi tinggi, kelas pembantu cuba semula kebuntuan boleh bekerja. Kelas ini boleh menangani kebuntuan dan cuba semula secara automatik beberapa kali sebelum gagal dengan pengecualian.
Strategi Pembahagian
Jika pembahagian boleh dilaksanakan, bahagikan data kepada set yang berbeza boleh mengelakkan kebuntuan sama sekali. Setiap partition boleh diproses secara bebas dalam benangnya sendiri. Ini menghapuskan kemungkinan pertikaian untuk kunci pada data yang sama.
Kesimpulan
Mengoptimumkan prestasi aplikasi berbilang benang dengan panggilan pangkalan data SQL Server memerlukan pengendalian kebuntuan dengan teliti . Menggunakan TPL, melaksanakan mekanisme pengendalian kebuntuan dan memanfaatkan strategi pembahagian boleh meningkatkan prestasi dengan ketara dan memastikan akses data yang cekap dan boleh dipercayai.
Atas ialah kandungan terperinci Bagaimana Multi-threading Boleh Meningkatkan Aplikasi C# Mengakses Pangkalan Data Pelayan SQL Sambil Mengelak Kebuntuan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!