Click here to Skip to main content
15,884,099 members
Home / Discussions / C#
   

C#

 
GeneralRe: Rx SubscribeOn and ObserveOn Pin
Kenneth Haugland25-Feb-16 4:38
mvaKenneth Haugland25-Feb-16 4:38 
SuggestionRe: Rx SubscribeOn and ObserveOn Pin
Matt T Heffron25-Feb-16 10:26
professionalMatt T Heffron25-Feb-16 10:26 
GeneralRe: Rx SubscribeOn and ObserveOn Pin
Kenneth Haugland25-Feb-16 10:33
mvaKenneth Haugland25-Feb-16 10:33 
GeneralRe: Rx SubscribeOn and ObserveOn Pin
Kenneth Haugland25-Feb-16 20:27
mvaKenneth Haugland25-Feb-16 20:27 
AnswerRe: Rx SubscribeOn and ObserveOn Pin
Matt T Heffron26-Feb-16 7:20
professionalMatt T Heffron26-Feb-16 7:20 
GeneralRe: Rx SubscribeOn and ObserveOn Pin
Kenneth Haugland25-Feb-16 20:55
mvaKenneth Haugland25-Feb-16 20:55 
QuestionIssue with retrieving items from an IEnumerable<T> Pin
RichardGrimmer24-Feb-16 3:27
RichardGrimmer24-Feb-16 3:27 
SuggestionRe: Issue with retrieving items from an IEnumerable<T> Pin
Richard Deeming24-Feb-16 3:50
mveRichard Deeming24-Feb-16 3:50 
Don't measure the performance of your code using DateTime; use the Stopwatch class[^] instead.

Did you make sure to "warm up" the code before you timed it, and run the test over many iterations?

Since you know the maximum number of items you'll be adding to the list, you should set its capacity when you create it:
C#
List<object> entityBatch = new List<object>(batchSize);

If you don't set the capacity, it starts at 4 and doubles each time it runs out of space.

You need to check the value returned from enumerator.MoveNext; if it returns false, you've reached the end of the sequence. Your code currently continues adding the final items from the sequence to the list until you reach the batch size.

You should consider using proper generic types, rather than a List<object>; that way, you avoid having to cast the items back to the correct type when you read the batches.

It's probably best to wrap this sort of thing up as a extension method. Here's the one I use:
C#
public static class EnumerableExtensions
{
    private static IEnumerable<IEnumerable<TSource>> BatchIterator<TSource>(IEnumerable<TSource> source, int size)
    {
        int count = 0;
        var bucket = new TSource[size];
        foreach (var item in source)
        {
            bucket[count] = item;

            checked
            {
                count++;
            }

            if (count == size)
            {
                yield return bucket.Select(x => x);
                bucket = new TSource[size];
                count = 0;
            }
        }
        if (count != 0)
        {
            yield return bucket.Take(count);
        }

        // ReSharper disable once RedundantAssignment
        bucket = null;
    }

    public static IEnumerable<IEnumerable<TSource>> Batch<TSource>(this IEnumerable<TSource> source, int size)
    {
        if (source == null) throw new ArgumentNullException(nameof(source));
        if (size < 1) throw new ArgumentOutOfRangeException(nameof(size));
        return BatchIterator(source, size);
    }
}


If you can, try to reproduce the problem in a small example, and either post it here, or create a .NET Fiddle[^] and post the link.



"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer


GeneralRe: Issue with retrieving items from an IEnumerable<T> Pin
RichardGrimmer24-Feb-16 4:23
RichardGrimmer24-Feb-16 4:23 
GeneralRe: Issue with retrieving items from an IEnumerable<T> Pin
Richard Deeming24-Feb-16 4:34
mveRichard Deeming24-Feb-16 4:34 
GeneralRe: Issue with retrieving items from an IEnumerable<T> Pin
RichardGrimmer24-Feb-16 4:44
RichardGrimmer24-Feb-16 4:44 
GeneralRe: Issue with retrieving items from an IEnumerable<T> Pin
Pete O'Hanlon24-Feb-16 5:06
mvePete O'Hanlon24-Feb-16 5:06 
GeneralRe: Issue with retrieving items from an IEnumerable<T> Pin
RichardGrimmer24-Feb-16 5:34
RichardGrimmer24-Feb-16 5:34 
GeneralRe: Issue with retrieving items from an IEnumerable<T> Pin
RichardGrimmer24-Feb-16 20:15
RichardGrimmer24-Feb-16 20:15 
GeneralRe: Issue with retrieving items from an IEnumerable<T> Pin
Pete O'Hanlon24-Feb-16 22:09
mvePete O'Hanlon24-Feb-16 22:09 
GeneralRe: Issue with retrieving items from an IEnumerable<T> Pin
RichardGrimmer26-Feb-16 4:28
RichardGrimmer26-Feb-16 4:28 
GeneralRe: Issue with retrieving items from an IEnumerable<T> Pin
RichardGrimmer24-Feb-16 20:16
RichardGrimmer24-Feb-16 20:16 
QuestionCapture a image fram from a local video using a button to transfer into a picturebox and then save into local disk in C#.NET Pin
Member 1209982523-Feb-16 20:57
Member 1209982523-Feb-16 20:57 
AnswerRe: Capture a image fram from a local video using a button to transfer into a picturebox and then save into local disk in C#.NET Pin
Pete O'Hanlon23-Feb-16 21:23
mvePete O'Hanlon23-Feb-16 21:23 
GeneralRe: Capture a image fram from a local video using a button to transfer into a picturebox and then save into local disk in C#.NET Pin
Richard MacCutchan24-Feb-16 1:16
mveRichard MacCutchan24-Feb-16 1:16 
AnswerRe: Capture a image fram from a local video using a button to transfer into a picturebox and then save into local disk in C#.NET Pin
Gerry Schmitz24-Feb-16 6:57
mveGerry Schmitz24-Feb-16 6:57 
QuestionDispose of RX subscriptions Pin
Kenneth Haugland23-Feb-16 2:28
mvaKenneth Haugland23-Feb-16 2:28 
AnswerRe: Dispose of RX subscriptions Pin
Kenneth Haugland23-Feb-16 2:32
mvaKenneth Haugland23-Feb-16 2:32 
Questionhello guys I have a problem in my string cmd.... Pin
Member 1217509322-Feb-16 22:59
Member 1217509322-Feb-16 22:59 
AnswerRe: hello guys I have a problem in my string cmd.... Pin
Pete O'Hanlon22-Feb-16 23:41
mvePete O'Hanlon22-Feb-16 23:41 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.