Nesnenin Kopyasını Oluşturmak
Nesnenin Kopyasını Oluşturmak
Bir nesnenin klonunu oluşturmak için object.MemberWiseClone() işlevini kullanabilirsiniz. Bu işlevin varsayılan uygulaması, bir nesnenin yüzeysel bir kopyasını üretir; bir nesnenin alanları çoğaltılmak yerine tam olarak kopyalanır.
MemberWiseClone() tarafından yapılan kopya yüzeysel bir kopya olduğundan, container’ın değeri her iki nesnede de aynıdır ve ContainedValue nesnesi içindeki bir değerin değiştirilmesi, MyObject’in her iki örneğini de etkiler.
İhtiyaç duyulan şey, yeni MyObject örneği için yeni bir ContainedValue örneğinin oluşturulduğu derin bir kopyadır. Bunu, ICloneable arabirimini uygulayarak yaparsınız.
ÜyeWiseClone() çağrısı şimdi yeni bir ContainedValue örneğiyle sonuçlanacak ve bu örneğin içeriğini my içeriğini etkilemeden değiştirebilirsiniz.
Bir nesne üzerinde tanımlanabilecek diğer bazı arabirimlerin aksine, ICloneable çalışma zamanı tarafından çağrılmaz; yalnızca Clone() işlevinin uygun imzaya sahip olduğundan emin olmak için sağlanmıştır. Bazı nesneler, bunun yerine bir örneği parametre olarak alan bir oluşturucu uygulamayı seçebilir.
Diğer Koleksiyonlar
Daha önce tartışılan toplama sınıflarına ek olarak, .NET Framework gösterildiği gibi birkaç sınıf daha sağlar.
Hangi sanal işlevlerin ve arayüzlerin uygulanacağına karar verirken bir nesnenin amaçlanan kullanımını göz önünde bulundurmalısınız. Bunun için yönergeler sağlar (jenerik eşdeğerler parantez içinde gösterilmiştir).
Jenerik olmayan koleksiyonları kullanmak yerine, mümkün olduğunca genel koleksiyonları kullanmalısınız. Genel koleksiyonlar, değer türleriyle çalışırken çok daha hızlıdır (bir büyüklük sırasına kadar) ve referans türleriyle çalışırken hala önemli ölçüde daha hızlıdır.
Jenerik koleksiyonlar ayrıca, jenerik olmayan koleksiyonlarda bulunmayan derleme zamanı tip güvenliği sağlar; ayrıca, tasarımcılar .NET Framework kitaplıklarının 1. sürümünde en çok işe yarayanları genel koleksiyonların tasarımına ve uygulamasına dahil ettiler.
Jenerikler, .NET 2.0’da CLS uyumludur; bu, jenerik sınıfları tüketebilecek, genişletebilecek ve üretebilecek dil aralığının önemli olacağı anlamına gelir; bu nedenle, dilin birlikte çalışabilirliği açısından jenerik koleksiyonlardan uzaklaşmak yersizdir.
Asenkron İşlemler
Modern bilgisayar işletim sistemleri, bir programın aynı anda birden fazla yürütme iş parçacığına sahip olmasına izin verir. En azından, aynı anda birden fazla şey oluyormuş gibi görünmelerine izin veriyorlar. Bu özellikten bir programlama dili ile yararlanmak ve birkaç işlemin paralel olarak gerçekleşmesine izin vermek genellikle yararlıdır.
Bunu, zaman alıcı bir görev gerçekleştirilirken bir programın kullanıcı arayüzünün yanıt vermemesini önlemek için kullanabilir veya bir engelleme işlemini (örneğin bir G/Ç) beklerken başka bir görevi yürütmek için kullanabilirsiniz.
CLR, bu tür işlemleri gerçekleştirmek için iki yol sağlar: iş parçacığı oluşturma yoluyla ve eşzamansız çağrı mekanizmaları aracılığıyla, bunun büyük bir konu olduğunu ve bu bölümdeki materyalin gerçek dünya uygulamaları için bir başlangıç noktası olduğunu unutmayın.
Büyük ölçekli çoklu iş parçacığı, karmaşık ve zorlu bir konudur ve .NET Performansını En Üst Düzeye Çıkarma ve Uzman .NET 1.1 Programlama gibi kitaplarda daha derinlemesine ele alınmıştır.
Illustrator kopyalama kısayolu
1000 tane mesaj kopyalama
Illustrator kısayolları
Seçili alan boş olduğu için pikseller dönüştürülemedi
Metin kopyalama
Illustrator kopyala yapıştır
Illustrator aynı yere kopyalama
Illustrator aynalama
Aynı anda birden fazla işlemin gerçekleştirilmesi, bir programa değerli bir kolaylık sağlar, ancak aynı zamanda programlama görevinin karmaşıklığını da artırır.
Bu program yürütülürken, işletim sistemi aynı anda başka görevleri de gerçekleştiriyor olabilir. Kod, kodun herhangi bir yerinde kesintiye uğrayabilir1 ancak kesintiden sonra her şey eskisi gibi olacaktır ve kesintinin gerçekleştiğini bilmenizin hiçbir yolu yoktur.
Bu örnek, çok iş parçacıklı programlar yazarken sık karşılaşılan sorunlardan birini göstermektedir. Örnekte, bazı durumlarda ortaya çıkabilecek gizli bir hata var, ancak örnek normal koşullar altında çalıştığında görünmüyor. Bunlar gibi hatalar, bulunması en kötü olanlardan bazılarıdır ve genellikle yalnızca stresli koşullar altında (bir müşterinin sitesinde olduğu gibi) ortaya çıkarlar. İşletim sisteminin kesintiye uğramasını simüle etmek için kodu değiştirebilirsiniz.
Thread.Sleep() çağrısı, geçerli iş parçacığının, çarpılan değeri kaydetmeden önce bir milisaniye uyku moduna geçmesine neden olur. Bu olduğunda, başka bir iş parçacığı gelecek ve aynı zamanda mevcut değeri getirecektir.
Koddaki temel hata, bu duruma karşı hiçbir korumanızın olmamasıdır. Ne yazık ki, bulması zor olacak kadar nadirdir. Çok iş parçacıklı uygulamalar oluşturmak, iyi tasarım tekniklerinin önemli olduğu bir alandır.
Koruma Teknikleri
Sorunları önlemek için birkaç teknik kullanabilirsiniz. Bunu akılda tutmak için yazılan kod, güvenli iş parçacığı olarak bilinir.
Genel olarak, çoğu kod iş parçacığı için güvenli değildir, çünkü iş parçacığı için güvenli kod yazarken genellikle bir performans cezası vardır.
Verileri Paylaşmayın
Bu tür sorunları önlemenin en iyi tekniklerinden biri, ilk etapta veri paylaşmamaktır. Her iş parçacığının ilgilenecek kendi verileri olacak şekilde bir uygulama tasarlamak genellikle mümkündür. Birkaç Web sitesinden aynı anda veri alan bir uygulama, her iş parçacığı için ayrı bir nesne oluşturabilir.
Bu kesinlikle en iyi seçenektir, çünkü hiçbir performans cezası uygulamaz ve kodu karıştırmaz. Bununla birlikte, kodu değiştirmek, dikkatlice kaçınmaya çalıştığınız hataları ortaya çıkarabileceğinden, biraz dikkat gerektirir. Örneğin, bir sınıfın iş parçacığı kullandığını bilmeyen bir programcı, paylaşılan veriler ekleyebilir.
Değişmez Nesneler
Değişmez nesneler tanım gereği iş parçacığı açısından güvenlidir. Birden çok iş parçacığı, bir veri parçasını aynı anda güvenli bir şekilde okuyabilir ve çok iş parçacıklı bir senaryoda önlemlerin alınması yalnızca değiştirme işlemleri yapılırken gerçekleşir. Değişmez nesneler, işlemlerin değiştirilmesine izin vermediğinden, başka herhangi bir iş parçacığı güvenliği önlemine ihtiyacınız yoktur.
Dize türü, değişmezlik yoluyla iş parçacığı güvenliği elde etmenin harika bir örneğidir. Bir dizgede ToUpper() gibi her değiştirme işlemi, yeni bir dizi örneği döndürür. Bir iş parçacığı, bir dizenin karakterlerinin numaralandırmasını başka bir iş parçacığının ToUpper()’ı çağırmasıyla aynı anda tamamlıyorsa, numaralandırmayı yürüten iş parçacığı etkilenmez, çünkü yeni büyük harfli dize tamamen ayrı bir nesnedir ve fiziksel olarak ilişkili değildir.
Değişmezlik, bir türe daha yüksek bir tasarım ve uygulama yükü getirir. Türün yöntemleri, türün kullanıcıları için, bir değiştirme işleminin, çağrıldığı örneği değiştirmek yerine yeni bir örnek döndürdüğünü anlayacak şekilde tasarlanmalıdır ve genellikle yüksek değeri desteklemek için immutable türün değişken bir eşdeğerini sağlamak akıllıca olur. -performans modifikasyon işlemleri. Dize için, StringBuilder eşdeğer değiştirilebilir türdür.
Web sitelerinizi, arama motorlarında en yukarı getirmek adına sizlere 3 adet paket öneriyoruz. Bu paketler sayesinde web siteleriniz aramalarda 1 yıl içerisinde en yukarıya tırmanacaktır.
1) Backlink Paketi 50 $ (Yıllık Ücret)
2) Hızlandırma Paketi 300 $ (Yıllık Ücret)
3) Kelime Yönlendirme Paketi 150 $ (Aylık Ücret)