PIXNET Logo登入

老爹寫程式

跳到主文

享受每行程式所帶來的新奇與成就. 更熱愛著問題被解決的剎那甜美.

部落格全站分類:職場甘苦

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 11月 11 週日 201215:09
  • [C#] == , Object.Equals 傻傻分不清楚

VS 裡的 ==, 與 Object.Equals 是不同的.
來個程式碼吧, 這樣比較好解釋.
            object a1 = 1;
            object a2 = 1;
            Console.WriteLine(string.Format("object a1==a2 {0}", a1 == a2));//false
            Console.WriteLine(string.Format("object a1.Equals(a2) {0}", a1.Equals(a2)));//true
            Console.WriteLine();

            object s1 = "s1";
            object s2 = "s1";
            Console.WriteLine(string.Format("object s1==s2 {0}", s1 == s2));//true
            Console.WriteLine(string.Format("object s1.Equals(s2) {0}", s1.Equals(s2)));//true
            Console.WriteLine();

            object r1 = new List<string>();
            object r2 = new List<string>();
            Console.WriteLine(string.Format("List<string> r1==r2 {0}", r1 == r2));//false
            Console.WriteLine(string.Format("List<string> r1.Equals(r2) {0}", r1.Equals(r2)));//false
            Console.ReadKey();
(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(1) 人氣(4,529)

  • 個人分類:.NET
▲top
  • 10月 24 週三 201220:31
  • [C#]自訂的 Class 繼承自 IComparable 以便具有 Sorting 功能

使用過如泛型 List 的人都知道, 當我有數值要排序的時候很簡單, 因為這是泛型具備的功能.  可是當自訂的 Class 要怎樣做呢?
其實很簡單, 只要繼承自 IComparable, 外加實做 CompareTo Method 就可以了. 看看 List.Sort 的說明及其多型就知道了.

這個方法會使用型別 T 的預設比較子 Comparer<T>.Default,以判斷清單項目的順序。 Comparer<T>.Default 屬性會檢查型別 T 是否實作 IComparable<T> 泛型介面,並使用該實作 (如果可用的話)。 如果不是,則 Comparer<T>.Default 會檢查型別 T 是否實作 IComparable 介面。 如果型別 T 不實作這兩種介面,則 Comparer<T>.Default 會擲回 InvalidOperationException。
List.Sort ()   使用預設比較子來排序在整個 List 中的項目。
List.Sort (泛型 Comparison)   使用指定的 System.Comparison 來排序在整個 List 中的項目。
List.Sort (泛型 IComparer)   使用指定的比較子來排序在整個 List 中的元素。

(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(5,531)

  • 個人分類:.NET
▲top
  • 10月 23 週二 201219:16
  • [SQL] 比較 exists or in 誰比較快

於 Oracle SQL Tuning Pocket Reference, By Mark Gurry 是這樣說的 :
1. 哪一個比較快是要看情況的. 使用 exists 時, 是由外面的 table 當作 driving table. 使用 in 時, 先執行子查詢, 再把此結果與外面的 table 做 join.
2. 一般而言, exists 會比 in 快. 除非使用 in 時, 子查詢的筆數很少, 外面的筆數很多. (文中的舉例是子查詢2,000筆, 外面的 table 16,000,000 筆)
(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(359)

  • 個人分類:Oracle
▲top
  • 10月 10 週三 201214:33
  • [C# Note]Boxing 和 Unboxing

http://msdn.microsoft.com/zh-tw/library/yz2be5wk.aspx
 
Boxing 和 Unboxing

Boxing 處理是將實值型別轉換成 object 型別,或是任何由這個實值型別實作的介面型別。 當 CLR Box 處理實值型別時,它會將值包裝在 System.Object 中,並儲存在 Managed 堆積上。 Unbox 處理則會從物件擷取實值型別。 Boxing 是隱含的;unboxing 是明確的。 boxing 和 unboxing 的概念是 C# 型別系統統一檢視的基礎,其中可將任何型別的值視為物件。

在下列範例中,會以「Box」處理整數變數 i,然後將此變數指派給物件 o。
int i = 123;
// The following line boxes i.
object o = i;  

物件 o 接著即可經 Unbox 處理,並指派給整數變數 i:
o = 123;
i = (int)o;  // unboxing
(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(830)

  • 個人分類:.NET
▲top
  • 10月 10 週三 201214:32
  • [C# Note]StringBuilder

StringBuilder
String 或 StringBuilder 物件之串連作業的效能是根據記憶體的配置頻率而定。String 串連作業永遠都會配置記憶體,而 StringBuilder 串連作業只有在 StringBuilder 物件緩衝區太小而無法容納新資料時,才會配置記憶體。因此,如果要串連固定數目的 String 物件,最好使用 String 類別的串連作業。在這種情況下,編譯器 (Compiler) 甚至可能將個別的串連作業結合成一個單一作業。如果要串連任意數目的字串 (例如,如果迴圈串連任意數目的使用者輸入字串),則對於串連作業來說最好使用 StringBuilder 物件。

屬性
Capacity     取得或設定由目前執行個體配置的記憶體可以包含的最大字元數。
Length     取得或設定目前 StringBuilder 物件的長度。

方法
Append     多載。 將指定物件的字串表示附加至這個執行個體的尾端。
AppendFormat     多載。 將格式化的字串 (其中包含零或更多的格式規格) 附加至這個執行個體。每一個格式規格會由對應之物件引數的字串表示所取代。
EnsureCapacity     請確定這個 StringBuilder 其執行個體的容量至少是某一指定的值。
Insert     多載。 在指定的字元位置上將指定物件的字串表示插入這個執行個體。
Remove     從這個執行個體移除指定的字元範圍。
ToString     多載。 覆寫。 將 StringBuilder 的值轉換為 String。

StringBuilder串接字串的迷思
http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/12/15/stringbuilder-for-static-string-concate.aspx
StringBuilder被拿來串接靜態變數=4152ms
string 直接指定靜態值=6ms
@"..."=7ms

StringBuilder與String的字串相接效能大車拼
http://blog.darkthread.net/blogs/darkthreadtw/archive/2009/09/07/article-stringbuilder-vs-string.aspx

(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(835)

  • 個人分類:.NET
▲top
  • 10月 10 週三 201214:26
  • [C# Note]List

List
表示可以依照索引存取的強型別物件清單。 提供搜尋、排序和管理清單的方法。
建構函式
List<T>()     其為空白執行個體且具有預設的初始容量。
List<T>(IEnumerable<T>)     從指定之集合複製的元素,且具有容納複製之元素數目的足夠容量。
List<T>(Int32)     這個執行個體是空白且可具有指定的初始容量。

屬性
Capacity     在不需要調整大小之下,取得或設定內部資料結構可以保存的元素總數。
  Capacity 是需要調整大小前 List<T> 可以存放的元素數目。Count 則是 List<T> 中實際含有的元素數目。
  Capacity 永遠大於或等於 Count。 加入元素時,如果 Count 超過 Capacity,則會先藉由自動重新配置內部陣列而增加容量,然後再複製舊元素並加入新元素。
  可以透過呼叫 TrimExcess 方法或明確地設定 Capacity 屬性的方式來降低容量。 當明確地設定 Capacity 的值時,也會重新配置內部陣列以容納指定的容量,並且會複製所有元素。
  http://msdn.microsoft.com/zh-tw/library/y52x03h2.aspx
 
方法
Add     將物件加入至 List<T> 的結尾。
AddRange     將特定集合的元素加入至 List<T> 的結尾。
BinarySearch(T)     使用預設的比較子 (Comparer) 並傳回元素以零起始的索引,來搜尋元素之整個排序的 List<T>。 必須已經依照比較子實作排序過,否則結果會不正確。這個方法為 O(log n) 運算。
BinarySearch(T, IComparer<T>)     使用指定的比較子並傳回元素以零起始的索引,來搜尋元素之整個排序的 List<T>。
Clear     將所有元素從 List<T> 移除。
Contains     判斷某元素是否在 List<T> 中。 這個方法是 O(n) 運算。
CopyTo(T[])     將整個 List<T> 複製到相容的一維陣列,從目標陣列的開頭開始。
Find     搜尋符合指定之述詞所定義的條件之元素,並傳回整個 List<T> 內第一個相符的項目。
IndexOf     多載。 傳回 List 或其中一部分中值的第一個項目之以零起始的索引。     
Insert     將項目插入 List 中指定的索引處。
InsertRange     將集合的元素插入至位於指定索引的 List 中。
Remove     從 List 移除特定物件的第一個相符項目。
RemoveAt     移除 List 中指定之索引處的項目。
Sort     多載。 排序 List 或其中一部分中的元素。
ToArray     將 List 的元素複製到新的陣列。
TrimExcess     將容量設為 List 中項目的實際數目,如果該數目小於臨界值。
(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(14,203)

  • 個人分類:.NET
▲top
  • 9月 15 週六 201220:49
  • ThreadPool.QueueUserWorkItem 的初階使用

沒想到要在 C# 中使用, Thread Pool 這麼簡單.
如下簡單範例, 當然實際的程式不可能這樣, 但這是一個好入門概念.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ThreadPoo
{
    class ThreadPool1
    {
        static void Main(string[] args)
        {
            System.Threading.WaitCallback waitCallback = new WaitCallback(MyThreadWork);
            ThreadPool.QueueUserWorkItem(waitCallback, "First");
            ThreadPool.QueueUserWorkItem(waitCallback, "Second");
            ThreadPool.QueueUserWorkItem(waitCallback, "Third");
            Console.WriteLine("Main thread exits.");
            Console.ReadKey();
        }
        static void MyThreadWork(object state)
        {
            Console.WriteLine("Begin of {0}", (string)state);
            Thread.Sleep(5000);
            Console.WriteLine("End of {0}", (string)state);
        }
    }
}
(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(7,793)

  • 個人分類:.NET
▲top
  • 8月 12 週日 201210:46
  • imo 遇到 ORA-00904: "M_ROW$$": 無效的 ID

imp 遇到以下的錯誤, 這是怎樣一回事.
m_row$$ 這個欄位心裡有印象, 記得在以下兩種情況, oracle 都會幫忙建一個 unique index, 裡面就是這個欄位. 心裡有這個印象, 但沒有特別去注意 ...
1. 建 mview 沒有 PK 時.
2. 做 online redefinition 沒有 PK 時.
(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(1,495)

  • 個人分類:Oracle
▲top
  • 2月 12 週六 201112:07
  • 利用 Trigger 自己做資料的 Replication

像我們使用 oracle, 如果要將一個 Table 的資料自 A DB 複製到 B DB, 當然有很多做法, 像使用 MView 就是一個極為簡單的解決方案, 但如果是多個要複製到一個, 例如 A, C DB 複製到 B DB, 又不想因為 A DB 有問題中斷服務, 導致 C DB 的資料沒有複製到 B DB. 目前想到的就是自己使用 Trigger 做 Replication 的行為.
舉一個最簡單的例子, 假設要處理一個產品定義的 Prod Table, Schema 如下, 我們將對這一個 table 所做的 DML 都記錄起來, 然後再將這些 DML 拿到目的 DB 去執行就可以達成我們的目的.
--要複製資料的 table, PK {prod_id}
CREATE TABLE Prod
(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(641)

  • 個人分類:Oracle
▲top
  • 1月 03 週一 201119:08
  • ORA-14402: updating partition key column would cause a partition change

ORA-14402: updating partition key column would cause a partition change
這是一個發生在 Partition Table 的問題, 例如我們以 Save_Time 當做分割 Partition 的欄位, 且一個月一個 Partition. 所以假設我們的 Table 裏有下列的 Partition.
PARTITION BY RANGE (Save_Time)
(
PARTITION Par_2010_01 VALUES LESS THAN (TO_DATE(' 2010-02-01 ','YYYY-MM-DD')) TABLESPACE TBS_2010_01,
PARTITION Par_2010_02 VALUES LESS THAN (TO_DATE(' 2010-03-01 ','YYYY-MM-DD')) TABLESPACE TBS_2010_02,
PARTITION Par_2010_03 VALUES LESS THAN (TO_DATE(' 2010-04-01 ','YYYY-MM-DD')) TABLESPACE TBS_2010_03,
);
(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(677)

  • 個人分類:Oracle
▲top
12...4»

個人資訊

py3939
暱稱:
py3939
分類:
職場甘苦
好友:
累積中
地區:

熱門文章

  • (14,014)SQL 從另一個表格更新資料
  • (6,695)Create/Alert Partition Table
  • (7,505)CREATE MATERIALIZED VIEW
  • (8,315)Oracle 帳號密碼管理
  • (17,201)Oracle over partition by
  • (7,793)ThreadPool.QueueUserWorkItem 的初階使用
  • (14,203)[C# Note]List

文章分類

  • Oracle (27)
  • P-Management (1)
  • 碎碎念 (1)
  • .NET (9)
  • 未分類文章 (1)

最新文章

  • [C#] == , Object.Equals 傻傻分不清楚
  • [C#]自訂的 Class 繼承自 IComparable 以便具有 Sorting 功能
  • [SQL] 比較 exists or in 誰比較快
  • [C# Note]Boxing 和 Unboxing
  • [C# Note]StringBuilder
  • [C# Note]List
  • ThreadPool.QueueUserWorkItem 的初階使用
  • imo 遇到 ORA-00904: "M_ROW$$": 無效的 ID
  • 利用 Trigger 自己做資料的 Replication
  • ORA-14402: updating partition key column would cause a partition change

文章精選

文章搜尋

誰來我家

參觀人氣

  • 本日人氣:
  • 累積人氣: