Monthly Archives: April 2007

Concatenating(?) string during compile

I’m writing a simple library for reading some data from one Firebird database, it’s not important… For better readability I’m creating CommandText as a string on more lines with some formatting. Because the performance was one of the criterion, I was not so comfortable assigning selects like this (everybody knows, that StringBuilder class is a lot faster when concatenating strings). But as you can expect (and me too), smart compiler creates this string (there’s no variable in it) during compile time as one big, isn’t it? Yeah. However why not to calm down myself with a hundred percent proof?

I’ve created small application only with:

string s = string.Empty;
s = "rrr" + 
"rrr";

in Main method. I used ILDasm tool from SDK to convince myself that it’s true:

.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 14 (0xe)
.maxstack 1
.locals init ([0] string s)
IL_0000: nop
IL_0001: ldsfld string [mscorlib]System.String::Empty
IL_0006: stloc.0
IL_0007: ldstr "rrrrrr"
IL_000c: stloc.0
IL_000d: ret
} // end of method Program::Main

And as you can see, the string is created as one piece, as I (and I hope you too) expected. Well, now I have better sleeping when showing the code of the library.

Note, that:

s += "rrr";
s += "rrr";

are completely different statements (there are two String.Concat commands).

Sortování v generické kolekci anonymní metodou

Když jsem dneska četl Anonymní metoda pro hledání v generické kolekci vzpomněl jsem si, že jsem podobnou věc dělal u sortování.

public void SortByPosition(bool descending)
{
  ((List<FbIndexSegment>)this.Items).Sort(delegate(FbIndexSegment item1, FbIndexSegment item2)
  {
    return (descending ? -1 : 1) * item1.Position.CompareTo(item2.Position);
  });
}

Někde jsem podobné řešení viděl a jen jsem to vydloubal z hlavy a upravil.

To jsem zase jednou updatoval …

Včera se ke mě dostala mašina s W2003, ovšem totálně nezaplátovaná. Tak jsem vzal SP2 a hned jsem ho tam nacpal. Rebootnu a hle. Remote Desktop ani ťuk. Samozřejmě když jsem rychleji jednal než myslel. Firewall mě odříznul a ja si neuvědomil, že se tak stane. Ach jo. Tak jsem vyrazil pro klávesnici a monitor a musel jsem se zalogovat lokálně. [:D]

No co poučení pro příště. Nejdřív přemýšlet co se změní a pak až konat. (A nebo nešahat na věci co fungujou. :) )

Katastrofální selhání

Před pár dny jsem se chtěl podívat na psaní add-inů ve VS2005. Našel jsem nějaké ukázky, ale většinou dost komplexní. Tak jsem si otevřel aspoň prázdný projekt a chystal se podívat co v částech, které VS vygenerovalo mají napsáno jiní v oněch příkladech. A hle, počítač pomalu dochrochtával a najednou:

Katastrofální selhání

Ani jsem takový úspěch nečekal. :) Na druhý pokus se mi ale vš v pořádku načetlo, takže asi jen nějáké chvilkové zaváhání.