Assembling a user agent descriptor, implemented using StringBuilder vs String
For a method like this, don't worry about performance until you have evidence that performance is a problem. Either way will almost certainly be fast enough.

I would suggest instead for readability that you separate the data (key-value pairs) from the construction of the string.

If the order of the pairs is not important, you can write

var data = new Dictionary&lt;string, string&gt;
{
    { "device-type", "mobile" },
    { "os", "Windows Phone" },
    ...
};
return string.Join(";", data.Select(kvp =&gt; kvp.Key + "=" + kvp.Value));


If order is important, use the slightly more verbose

var data = new[]
{
    new KeyValuePair&lt;string, string&gt;("device-type", "mobile"),
    new KeyValuePair&lt;string, string&gt;("os", "Windows Phone"),
    ...
};
return string.Join(";", data.Select(kvp =&gt; kvp.Key + "=" + kvp.Value));