C # 성능 최적화 정보

1, 작업을 풀고, 일반적인 포장의 사용을 방지 할 수 있습니다.

        GC 포장 작업 압력의 원인이됩니다, 일반적인 컬렉션을 방지하기 위해 사용되어야한다 컬렉션에 발생합니다.
        목록을 사용하여 값의 컬렉션 <T> 대신 사전을 사용하여 ArrayList를 <TKEY, TValue> 대신 해시 테이블하십시오.

ArrayList h=new ArrayList();  //不建议
h.Add(1);
List<object> h = new List<object>();  //不建议
h.Add(1);
List<int> h = new List<int>();    //建议
h.Add(1);
초기 값에 할당 빈 문자열 String.Empty로 변수를 사용하여 2

        String.Empty로 한 지시 대상이며, ""구체적인 실현

string filter=“”;//不建议
stringfilter=string.Empty; //建议
3, 모두 StringBuilder 문자열 접합 작업

       스플 라이스 문자열 접합 작업을하는 데 사용되어야 이상, 특히 10 배 (경험치)의 긴 문자열을 구성하여 StringBuilder

//不建议:
string s = null;
for (int i = 0; i < 10000; i++)
{
s += i;
}
//建议:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++)
{
sb.Append(i);
}
string t = sb.ToString();
4, StringBuilder 내가의 초기 크기를 지정 만들
        디폴트의 초기 크기를 한 번 이상 한 번 더, 16 및 필요성 크기 조정 GC 압력을 증가시킨다. 권장 초기 크기는 경험을 기반으로 지정합니다.

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; i++)
{
sb.Append(i);
}
string s = sb.ToString();
//建议修改为
StringBuilder sb = new StringBuilder(256);
for (int i = 0; i < 10; i++)
{
sb.Append(i);
}
string s = sb.ToString();
오, 남용의 StringBuilder를 방지하기 위해 (주의,하지만 난 사용하지 않은)

        마찬가지로 STR1 STR2 +는 + + STR3 STR4 문자열 접합 동작 String.Concat (STR1, STR2, STR3, STR4)로 컴파일되지만 StringBuilder의 효율보다 높다. String.Concat 문자열의 길이는 한 번 결정됩니다, 모두 StringBuilder는 문자열을 생성 여러 개체의 경우에 적용, 크기 조정 수행해야합니다.

        직접적으로 .Length = 0의 StringBuilder 초기화된다.

        결과에 따르면, 언제 .Length = 0에 의해 직접 제공되는 동일한 StringBuilder의 객체를 사용하여 복수 회는 빠른 초기화.

StringBuiler sb = new StringBuilder(256);
......
sb.Remove(0, sb.Length); //不建议
sb.Length = 0; //建议
도 6은, 파라미터로서 복소 입력 변수의 값을 참조 효율 개선하는데 사용될 수있는
        관리 힙 참조 형으로부터 할당 호출 스택에서 할당 값 유형. 상기 방법은 값 유형 파라미터로서 사용하는 경우, 디폴트 파라미터 값이 복사된다.

//不建议
static void PrintDateTime(DateTime dt)
{
Console.WriteLine(dt);
}
//建议
static void PrintDateTime(ref DateTime dt)
{
Console.WriteLine(dt);
}
도 7은 ItemArray DataRow를 일괄 지정을 달성하여

       모든 필드 DataRow를 할당, 낮은 효율에 의해 열 할당에 필드 이름을 사용하는 경우. 이 시점에서 우리는 대량 필드 할당을 사용하려고합니다.

       당신은 ItemArray 또는 rows.Add 방법을 사용할 수 있습니다 :

// ds是数据集(DataSet)对象
DataTable dt = ds.Tables[0];
DataRow row = dt.NewRow();
row.ItemArray = new object[] { value1, value2, …, valuen };
// ds是数据集(DataSet)对象
DataTable dt = ds.Tables[0];
dt.Rows.Add(value1, value2, …, valuen);

       다음과 같이 연속 한 과제를 많이 수행하지 않도록해야합니다 :

DataTable dt = ds.Tables[0];
DataRow row = dt.NewRow();
row["col1"] = value1;
row["col2"] = value2;
…
row["coln"] = valuen;
8, 병렬 연산의 DataTable의 합리적인 이용

       DataTable에 내장 된 병렬 계산의 효율성을 최적화하기 위해, 각각의 CPU에 대한 기능을 컴퓨터를 이용할 수있다.

IEnumerable<DataRow> FindRows() //查找所有数量小于0的分录
{
    DataTable dt = ItemDataTable;
    ……
    return dt.Select(“Quantity<0”); //未使用并行计算
}
IEnumerable<DataRow> FindRows() //查找所有数量小于0的分录
{
    DataTable dt = ItemDataTable;
    ……
    int index = dt.Columns.IndexOf("Quantity");
    return dt.AsEnumerable().AsParallel().Where(dr => (decimal)dr[index] < 0); //使用并行计算:
}

        실험에 의하면 때 병렬 계산 DataTable을 선택 우수한 여과 및 순환 모드의 행 선택; 때 유사한 특성의 행.

9 합병 ImportRow는 동일한 구조를 사용 DataTable을 달성

       사용 병합 방법은 쉽게 통합의 DataTable을 달성,하지만 매우 가난한 효율성 병합 코드가 있습니다. 다음 예는 다음과 같다 :
DataTable[] srcTables= ... ;
foreach(DataTable src in srcTables)
{
	dest.Merge( src ) ;
}
       ImportRow도 성능이 훨씬 더 병합 비교된다 DataTable에 병합 동작을 실현할 수있다. 다음 코드 예제는 다음과 같습니다
DataTable[] srcTables = ... ;
foreach(DataTable src in srcTables )
{
  foreach(DataRow row in src.Rows)
  {
     dest.ImportRow( row ) ;      
  }
}
10,

















HTTPS : //my.oschina.net/cjkall/blog/195846 재현

추천

출처blog.csdn.net/weixin_33755557/article/details/91756583