I would like to ask that which case of the two below is more preferable than the other considering garbage collection, memory and cpu usage in C#.
a = data.Split('|');
b = data.Split('|');
c = data.Split('|');
d = data.Split('|');
e = data.Split('|');
string splitedData = data.Split('|');
b = splitedData;
c = splitedData;
d = splitedData;
e = splitedData;
There's no reason to do a computation that has the same result multiple times, especially if it involves memory allocations. You're correct in that your first snippet has worse time and memory performance.
Every call to split will iterate over the string (probably the fastest part of all that), allocate two new arrays and copy a lot of substrings around. For operations such as this you should always store the result instead of making two calls.
Technically even property accesses can be stored with a very minor performance gain, but most of the time you shouldn't bother unless in situations like above.