CARVIEW |
Select Language
HTTP/2 301
date: Sat, 26 Jul 2025 08:42:51 GMT
content-length: 0
location: https://github.com/dotnet/android/pull/2328
server-timing: nginx;desc="NGINX";dur=1.288881,glb;desc="GLB";dur=101.222968
x-voltron-version: a2eb102
vary: Accept-Encoding, Accept, X-Requested-With
server: github.com
x-frame-options: DENY
strict-transport-security: max-age=31536000; includeSubDomains; preload
set-cookie: _gh_sess=N%2FF9y16RfY0I%2FG3Jn0xojQIz1Aomf%2F3DmnjXuEVWkvK%2BRDQ%2Fc4HaO8jFzwJByhfmlcSIR52TDodW5YItmlhdPnmIFBrsJdDFrSkaIxBkjQ%2FvYqU6UoFC5hW%2B94tNb72t559N%2Fz%2B%2B%2B1IQmFxP%2B5WqTMNnXtnn8Na1NeY8SMFpFQfgONgGVBhRzm6aOAFFjLILTkITWwEvIANQ%2Fh%2F%2F57jerQERjsvhVtHq0VBtDTQ3hmi9JLgcWtj6L3UxcNsaJRlpJlXT2aNzcIkRt%2BeGKfF%2BPQ%3D%3D--g5m9f%2B45f5E62HI5--hRRMUILYEIsmD7UETh%2BH6Q%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.817755812.1753519371; Path=/; Domain=github.com; Expires=Sun, 26 Jul 2026 08:42:51 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Sun, 26 Jul 2026 08:42:51 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: B664:14DB91:3775A3:4A6F2D:6884950B
HTTP/2 200
date: Sat, 26 Jul 2025 08:42:52 GMT
content-type: text/html; charset=utf-8
cache-control: no-cache
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
referrer-policy: no-referrer-when-downgrade
server-timing: pull_request_layout-fragment;desc="pull_request_layout fragment";dur=432.442352,conversation_content-fragment;desc="conversation_content fragment";dur=476.85517,conversation_sidebar-fragment;desc="conversation_sidebar fragment";dur=394.449323,nginx;desc="NGINX";dur=0.96324,glb;desc="GLB";dur=101.381276
strict-transport-security: max-age=31536000; includeSubdomains; preload
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
x-content-type-options: nosniff
x-frame-options: deny
x-voltron-version: a2eb102
x-xss-protection: 0
server: github.com
content-encoding: gzip
accept-ranges: bytes
x-github-request-id: B664:14DB91:3775BC:4A6F56:6884950B
[Xamarin.Android.Build.Tasks] more ConvertResourcesCases improvements by jonathanpeppers · Pull Request #2328 · dotnet/android · GitHub
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 555
[Xamarin.Android.Build.Tasks] more ConvertResourcesCases improvements #2328
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
dellis1972
merged 1 commit into
dotnet:master
from
jonathanpeppers:convertresourcescases-linq
Oct 23, 2018
Merged
[Xamarin.Android.Build.Tasks] more ConvertResourcesCases improvements #2328
dellis1972
merged 1 commit into
dotnet:master
from
jonathanpeppers:convertresourcescases-linq
Oct 23, 2018
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Context: https://www.getcodetrack.com/ I used a "freeware" .NET profiler to see what it would turn up. Using the tool, I profiled the following .NET process: .\bin\Debug\bin\xabuild.exe .\tests\Xamarin.Forms-Performance-Integration\Droid\Xamarin.Forms.Performance.Integration.Droid.csproj /v:quiet This seemed to have a lot of useful information, and I quickly noticed: Monodroid.AndroidResource.UpdateXmlResource -> 3683 calls -> 2.13s .. Monodroid.AndroidResource.ResourceNeedsToBeLowerCased -> 2384 calls - 319.53ms This is a known codepath, the `ConvertResourcesCases` MSBuild task, that we know takes a bit of time. Looking through the call stack, I saw two points we could make easy fixes for: - A `Regex` in `AndroidResource` was not using `RegexOptions.Compiled` - There was a string append `dirPrefix + "*"` in a LINQ expression that could be done up front. - There was a bit of LINQ usage such as: if (Directory.EnumerateDirectories (resourceBasePath, dirPrefix + "*").Any (dir => Directory.EnumerateFiles (dir, fileNamePattern).Any ())) So I added `RegexOptions.Compiled` and converted the LINQ expressions to `foreach` loops. I could see a noticeable change in these methods which moved further down the list of methods, when sorted by time duration. But since the time differences *in the profiler* likely aren't going to reflect the real world, I did a before/after comparision with the Xamarin.Forms.ControlGallery project. Project here: https://github.com/jonathanpeppers/Xamarin.Forms/tree/msbuild-timing/Xamarin.Forms.ControlGallery.Android Script here: https://github.com/jonathanpeppers/msbuild-timing/blob/master/xamarin.forms.ps1 Before: 7224 ms ConvertResourcesCases 6 calls After: 7034 ms ConvertResourcesCases 6 calls So about a 200ms improvement on Windows, for adjusting a bit of code. I suspect the improvement won't be as good on MacOS, since I don't believe `RegexOptions.Compiled` is implemented in Mono. (It is safely ignored) Other changes: - Code such as `(value ?? String.Empty).Trim ();` - Simplified to `value?.Trim ();` - Removed unused `filePath` variable Future changes: It may be worth auditing all regexes and adding `RegexOptions.Compiled` if they appear to be called a lot?
Build logs: logs.zip |
dellis1972
approved these changes
Oct 23, 2018
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
You can’t perform that action at this time.
Context: https://www.getcodetrack.com/
I used a "freeware" .NET profiler to see what it would turn up.
Using the tool, I profiled the following .NET process:
This seemed to have a lot of useful information, and I quickly noticed:
This is a known codepath, the
ConvertResourcesCases
MSBuild task,that we know takes a bit of time.
Looking through the call stack, I saw two points we could make easy
fixes for:
Regex
inAndroidResource
was not usingRegexOptions.Compiled
dirPrefix + "*"
in a LINQ expressionthat could be done up front.
So I added
RegexOptions.Compiled
and converted the LINQ expressionsto
foreach
loops. I could see a noticeable change in these methodswhich moved further down the list of methods, when sorted by time
duration.
But since the time differences in the profiler likely aren't going
to reflect the real world, I did a before/after comparision with the
Xamarin.Forms.ControlGallery project.
Project here:
https://github.com/jonathanpeppers/Xamarin.Forms/tree/msbuild-timing/Xamarin.Forms.ControlGallery.Android
Script here:
https://github.com/jonathanpeppers/msbuild-timing/blob/master/xamarin.forms.ps1
Before:
After:
So about a 200ms improvement on Windows, for adjusting a bit of code.
I suspect the improvement won't be as good on MacOS, since I don't
believe
RegexOptions.Compiled
is implemented in Mono. (It is safelyignored)
Other changes:
(value ?? String.Empty).Trim ();
value?.Trim ();
filePath
variableFuture changes:
It may be worth auditing all regexes and adding
RegexOptions.Compiled
if they appear to be called a lot?