{"action":"created","issue":{"url":"https://api.github.com/repos/jhgbrt/yadal/issues/1","repository_url":"https://api.github.com/repos/jhgbrt/yadal","labels_url":"https://api.github.com/repos/jhgbrt/yadal/issues/1/labels{/name}","comments_url":"https://api.github.com/repos/jhgbrt/yadal/issues/1/comments","events_url":"https://api.github.com/repos/jhgbrt/yadal/issues/1/events","html_url":"https://github.com/jhgbrt/yadal/pull/1","id":169426203,"number":1,"title":"Changes for speed increase.","user":{"login":"deipax","id":20838295,"avatar_url":"https://avatars.githubusercontent.com/u/20838295?v=3","gravatar_id":"","url":"https://api.github.com/users/deipax","html_url":"https://github.com/deipax","followers_url":"https://api.github.com/users/deipax/followers","following_url":"https://api.github.com/users/deipax/following{/other_user}","gists_url":"https://api.github.com/users/deipax/gists{/gist_id}","starred_url":"https://api.github.com/users/deipax/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/deipax/subscriptions","organizations_url":"https://api.github.com/users/deipax/orgs","repos_url":"https://api.github.com/users/deipax/repos","events_url":"https://api.github.com/users/deipax/events{/privacy}","received_events_url":"https://api.github.com/users/deipax/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2016-08-04T17:12:30Z","updated_at":"2016-08-22T23:21:57Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/jhgbrt/yadal/pulls/1","html_url":"https://github.com/jhgbrt/yadal/pull/1","diff_url":"https://github.com/jhgbrt/yadal/pull/1.diff","patch_url":"https://github.com/jhgbrt/yadal/pull/1.patch"},"body":"Also, added a rework of FastReflection that is faster to access getter/setters.  Supports Fields on POCO and uses any backing fields found automatic properties."},"comment":{"url":"https://api.github.com/repos/jhgbrt/yadal/issues/comments/241580949","html_url":"https://github.com/jhgbrt/yadal/pull/1#issuecomment-241580949","issue_url":"https://api.github.com/repos/jhgbrt/yadal/issues/1","id":241580949,"user":{"login":"deipax","id":20838295,"avatar_url":"https://avatars.githubusercontent.com/u/20838295?v=3","gravatar_id":"","url":"https://api.github.com/users/deipax","html_url":"https://github.com/deipax","followers_url":"https://api.github.com/users/deipax/followers","following_url":"https://api.github.com/users/deipax/following{/other_user}","gists_url":"https://api.github.com/users/deipax/gists{/gist_id}","starred_url":"https://api.github.com/users/deipax/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/deipax/subscriptions","organizations_url":"https://api.github.com/users/deipax/orgs","repos_url":"https://api.github.com/users/deipax/repos","events_url":"https://api.github.com/users/deipax/events{/privacy}","received_events_url":"https://api.github.com/users/deipax/received_events","type":"User","site_admin":false},"created_at":"2016-08-22T23:21:57Z","updated_at":"2016-08-22T23:21:57Z","body":"The vast majority of speed up comes from sending in maps of the field/property names.  If M is the number of columns and N the number of rows,: The previous implementation called GetFields M*N times where the current implementation calls it just M times.  The previous implementation also called GetterSettersForType<T>() N times where the current implementation calls it just 1 time. \r\n\r\nAs to ConvertTo, yes, I did change it in a couple different ways for speed, but it was a change independent of the one I listed above and can be skipped or considered at a different point in time:\r\n\r\nThe first thing to note is that the ConvertValueType is the place in which the exception was being thrown.  I was aware that I was changing what could be an interface breaking change, but only if someone was attempting to convert a null/dbnull in a try/catch and then branching logic on that .. which I, personally, try to avoid.  Since the other functions were returning default(T), it seemed like a safe bet .. especially when you consider that its primary purpose is to build <T> from data.  If the reader returned dbnull, then let the property remain default. That was my preference, but it is your call.\r\n\r\nAnother way I changed the ConvertTo was to test the type of the object being sent in for conversion against <T> ... if they were the same type, why not just unbox it and return it?  Oddly enough Convert.ChangeType will spend cycles attempting to change an int to an int or a long to a long. \r\n\r\nA note on FastReflection, I pretty much left it alone except for returning the IReadonlyDictionary interface (which I suppose is also a breaking change) ... I noticed the getter was calling a ConvertTo after retrieving the value of the property. This convert would only ever serve to change a null/dbnull to a default(T) or throw the exception if it was a value type because if the property was set, that implies that the value returned was already the correct type.  Something, again, I thought as odd considering my take on try/catch logic branching.\r\n\r\nWhat would you prefer I do?"}}
{"actor":{"display_login":"deipax"}}