Largest Palindrome efficiency
I'm sure there are other ways to improve it but here are a few quick points: 


Start from the end and work your way back, that way once you've found one palindrome you're done!
You only have to check half of the digits for equality.
We can shave off some time by avoiding Array.Copy / Array.Reverse


Something like this:

var limit = ?
for (int i = limit; i &gt; 0; i--)
{
    number = i;
    string s = number.ToString();
    char[] charArray = s.ToCharArray();

    bool isEqual = true;
    int halfLength = charArray.Length / 2; // will skip the middle digit
    int max = charArray.Length - 1;
    for(int j = 0; j &lt; halfLength; j++)
    {
        if(charArray [j] != charArray[max - j])
        {
            isEqual = false;
            break;
        }
    }

    if (isEqual)
    {
        palindrome = number;
        break; // stop evaluating here
    }
}