I'd like to see this optimized further.  Seems wrong to allocate a MemoryStream and BinaryReader and throw them away on new instances of the same Effect.  Maybe consider something simpler like:

```
var effectKey = BitConverter.ToInt32(effectCode, 12);
```

... to peek into the array and grab just the value you need.  If the file is the wrong type it will fail anyway.