ContextSwitchDeadlock was detected durumu

22 Ağu 2009 In: .net, ipucu
Eger Visual Studio ile debug yaparken aşagı daki hatayı alıyorsanız :

ContextSwitchDeadlock was detected
" CLR, 60 saniye içinde 0x46fae0 COM içeriğinden 0x46fc50 COM içeriğine geçemedi. Hedef içeriğe/gruba sahip olan iş parçacığı büyük olasılıkla pompalamayan bekleme yapıyor veya Windows iletileri pompalamadan çok uzun süreyle çalışan bir işlemi işliyor. Bu durum performansı genellikle kötü etkiler ve uygulamanın yanıt vermemesine veya bellek kullanımının zaman içinde sürekli artmasına neden olabilir. Bu sorunu önlemek için, tüm tek iş parçacıklı (STA) grup iş parçacıklarının bekleme komutları (örn. CoWaitForMultipleHandles) pompalaması ve uzun süre çalışan işlemler sırasında da düzenli olarak ileti pompalaması gerekir. "

Çözüm oldukca basit tek yapmanız gereken :

Debug -> Exceptions -> Managed Debug Assistants

altındaki ContextSwitchDeadlock check ini kaldırmak. CLR den kaynaklanan bu durum Release aşamasında tabii ki oluşmuyor.
XtraGrid üzerine bir DataSoruce Bind ettiniz ve kullanıcı MultiSelect özelligi ile grid üzerinde işlem yapmak istedigi satırları seçti, 
Normalde gridView1.GetSelectedRows() size seçili olan satırların Row Handles larını veriyor. Ama gruplanmış verilerde bazı negatif degerlerle ugraşmanız gerekmekte.

Onun yerine aşagıdaki method size parametre olarak gönderdigini GridView in içinde seçili olan satırları aynen bind ettiginiz verileri ile DataTable olarak bütün kolonları ile getirmekte.


        private DataTable SecilenlerinListesi2(DevExpress.XtraGrid.Views.Grid.GridView view)
        {
            DataTable sonucTb = new DataTable();
            if(view.DataSource is DataView)
            {
                DataTable kaynakTb = ((DataView)view.DataSource).Table;
                sonucTb = kaynakTb.Clone();
                foreach(int rowHandle in view.GetSelectedRows())
                {
                    DataRowrow = view.GetDataRow(rowHandle);
                    sonucTb.Rows.Add(row.ItemArray);
                }
                sonucTb.AcceptChanges();
            }
            return sonucTb;
        }

Sürekli yeni tablo açmayınca insan unutuyor. Geçen gün yine hatırlayamadım, tırmalamaktansa buraya yazayım dedim.

Microsoft SQL Server dabu işlem ne kadar kolay sa Oracle da o kadar zor. Sql Server Management Studio da "Databases" altında açmak istedigimiz VT yi seçip, sag tıklayıp "New Tablo" dedikten sonra, istedigimiz kolonun adını yazıp mesela ID "Data Type"ını "int" yapıp, sag tıklayıp  "Set Primary Key" deriz ve "Column Properties" den "Identity Specification" da "(Is Identity)"i "Yes" yapar ve "Kaydet" deriz bu kadar 

 

 


Ama Oracle da işler biraz farklı. En azından bu kadar kolay degil. Bir kolonu her primary key olarak ayarlıyayım hemde otomatik artsın istiyorsanız.

Yapmanız gerekenler şunlar : 

1- Tablonuzda otomatik artmasını istediginiz ID kolonunu yaratın ve primary key olarak ayarlayın.

2- Bir sequence yaratmamız gerekiyor. 

create sequence SiparisID_seq
start with 1
increment by 1
nomaxvalue;
 

3- Şimdi tablonuz için bir trigger yaratıyoruz. Before Insert Triggeri 

  CREATE OR REPLACE TRIGGER "HASTANE"."SIPARIS_BEF_INS"
BEFORE INSERT ON HASTANE.SIPARIS
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
  if inserting then if :NEW."SiparisID" is null then
     select SiparisID_seq.nextval into :NEW."SiparisID" from dual;
  end if;
end if;
end;
 
ALTER TRIGGER "HASTANE"."SIPARIS_BEF_INS" ENABLE;

İşte bu kadar. Artık "SIPARIS" tablosunda, auto increment hemde Primary Key olan "SiparisID" kolonumuz var. Ve otomatik bir bir artan bir şekilde.

 

Hepimiz projelerimizde olmazsa olmaz control olan DataGrid veya GridView ı kullanıyoruz. Peki göstermemiz gereken verinin çok fazla ise, hiç kimse 20 sayfa aşagı uzanan bir gride bakmak istemez.

Bunun 3 çözümü var.

1. Klasik olan sayfalama yontemi, controllerin içinde mevcut olan AllowPaging özelligi sayesinde her sayfada kaç satırın gösterilecegini ve sayfalama methodunu seçmemiz yeterli.

2. iframe kullanarak o GridViewi oraya yerleştirmek, iframe sabit bir bouyt vermek Height="200px" Width="400px" gibi Scrolling i de Auto yapmamız yeterli.

3. Bu Son çözüm bence en şık olanı eger sayfalama istemiyor ve butun kayıtları görüntülemek istiyorsanız, bu çözüm tam size göre.

   ilk olarak grid i göstermek istidiginiz sayfada HTML kodlarının içinde gridi bu DIV satırlarının arasına koyun

<DIV style="OVERFLOW: auto; HEIGHT:330px">
         datagrid veya gridview nesnesi buraya
</DIV>

İşte bu satırlar grid view i kaydırma çubugu içerinde çok hoş bir şekilde göstericek sanki bi fram içerinde gibi. Lakin bir sorun oluşacak siz aşagı dogru scroll yapınca grid in header i yani column isimleride görünmez olacak.O yuzden grid in headerinin sabitlenmesi gerekicek. Buyüzden bu CSS trik ini kullanıcaz...

Sayfanızın <HEAD> tagları arasına da bu stili ekleyelim

<style type="text/css">
.DataGridFixedHeader {background-color: white; position:relative; top:expression(this.offsetParent.Top-1)
;}
</style>


Ekledikten sonra tek yapmamız gereken gridin header e bu CSS i uygulamak. 2 yolu mevcut 

   1. Design aşamasında gride tıklayıp Properties den "Header" i seçip "CssClass" a şunu yazmak

               "ms-formlabel DataGridFixedHeader"

   2. yada HTML sekmesinden koda eklemek 

               <asp:DataGrid id="dgContacts" runat="server" ... >...   
               <HeaderStyle CssClass="ms-formlabel DataGridFixedHeader"></HeaderStyle>...

ne kadar kolay demi ;)

Hotmail olmayan bir posta hesabıyla nasıl msn messenger kullanılır.

1- https://accountservices.passport.net/
    adresine girilir.

2- sag tarafdaki "Hesap için kaydolun" linkine tıklanılır.  (yada buraya : https://accountservices.passport.net )


3- " E-posta adresiniz var mı? " sorusuna 
    " Evet, e-posta adresim kullanılsın "  cevabı verilir

4- Gelen pencereye kullanmak istediginiz mail adresiniz yazarsınız, bir de şifre yazarsınız (mail hesabınızdaki ile aynı olmak zournda degil)
    Gizli sorunu fln yazdıktan sonra. " Devam " denir.

5- " Sözleşmeleri gözden geçirin ve imzalayın " bölümünde yazmış oldunuz maili yeniden o kutuya yazarsınız aynısını(imza niyetine)(soldan kopyalayıp yapıştırabiliriniz.

6- Sizin o posta adresinzi bir mail gelecek orada en üstteki onaylama linkine tıklayarak aktif hale getireceksiniz o kadar.
Artıkın kullanıma hazır. MSN Messengerden kullanbilirsiniz mailinizi.

Hayırlı olsun...

Facebook u Türkçe Kullanmak

15 Kas 2007 In: ipucu
Efendim tek yapmanız gereken, Mozilla Firefox u kurmak. Bilmeyenler için söylüyorum Firefox, Internet Explorer in alternatifi. Ne daha iyi dene bilir, nede Internet Explorerdan geri kalır.

Eger makinanızda Firefox yüklü ise direk 2. aşamadan başlayınız.

  1. Firefox'u ücretsiz indirin ve kurun. http://www.firefox.com
  2. Firefox üzerinden Türkçe Facebook eklentisini yükleyin.
  3. Firefox'u yeniden başlatın.
  4. Facebook'a girin.
  5. İşte bu kadar   :)

Windows’un açılışı esnasında otomatik olarak yüklenen yazılımlar kimi zaman sıkıntı yaratabilirler. Bu yüklemeler süresinde beklemek zorunda kalırız ve windowsumuz çok geç açılır.

Açılışta yüklenen yazılımların listesine Başlat->Çalıştır yolunu izleyip, msconfig komutunu girdikten sonra açılan pencerenin Başlangıç sekmesi altından erişebiliyoruz. Gereksiz gördügünüz veya çalışmasını istemediginiz uygulamaları açılış sırasında yükletmeye bilirsiniz.

Kolay gelsin...

Söylenene göre MS buna Hack diyor ama araştırmacılar bunun için döküman özelligi :)

1-)  İlk olarak " slmgr -rearm " yöntemini kullanacagız. Aktivizasyona bir gün kala, " Başlat " ve arama çubuguna " cmd " yazınız ama bu komut satırının " Ctrl + Alt + Enter " ile Administrative modda çalıştıgına emin olunuz.

2) " slmgr -rearm " ve  Enter a basınız. 45 sonra bilgisayarınıza restart atmanız için ekran gelecek. Restart sonrası activizasyon süresi yine 30 gün olacak. Bu methodu 3 kere kullanabilrisiniz, yani toplam 120 gününüz var demek.

3) Registry ayarlarını açmak için arama çubuguna " regedit  " yazıp enterleyin.

4) HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ Currentversion \ SL   - bulun

5) "SkipRearm " e sağ ile tıklayıp degerini  1 yapın.

6) CArama çubuguna yine " cmd " yazıp enterleyin ama  Administrative Modunda oldugun emin olun.

7) " slmgr -rearm " yine yazıp Vista yı bir 30 gün daha uzatın. Şimdi 8 kere daha yapma şansınız var buda toplamda size 360 gün daha verecektir.  :)

Ben Kimim ?

Celiker BahceciMerhabalar, ben Çeliker BAHÇECİ. 2004 den beri özel sektörde bilgisayar mühendisligi ve egitmenlik yapıyorum. Yine aynı yılın Ekim ayından beri sitemde .Net ile programlama ve hayat görüşüm ile ilgili makalelerimi yayınlıyorum. Blogum dışında Yazgelistir.com, mobilnedir.com gibi ineta kapsamındaki bir çok siteye Microsoft teknolojileri ile ilgili yazılar yazmaktayım.
Bu site ile sizinde hayatınızı anlamlandırmanızda bir parça katkımın olması dilegiyle...


Arşiv