Skip to content

Instantly share code, notes, and snippets.

@Attackmonkey
Last active July 13, 2017 10:28
Show Gist options
  • Save Attackmonkey/8d021223914d1cf949d6b2a5f303df2e to your computer and use it in GitHub Desktop.
Save Attackmonkey/8d021223914d1cf949d6b2a5f303df2e to your computer and use it in GitHub Desktop.
Example of Umbraco Performance Test Controller - uses a generic timer method that all the other methods call. Pretty basic, but seems to work OK for quick and dirty benchmarks.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Umbraco.Web.Mvc;
using Umbraco.Web;
using Examine;
using UmbracoExamine;
namespace WebApp.Controllers
{
public class BenchmarkController : SurfaceController
{
#region all posts
public ActionResult AllByBadLinq(bool loop = false)
{
var result = GetTime(() => GetByBadLinq(loop));
return Content(result);
}
private void GetByBadLinq(bool loop = false)
{
var test = Umbraco.TypedContentAtRoot().First().Descendants().Where(a => a.DocumentTypeAlias == "blogPost");
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult AllChildrenFromNode(bool loop = false)
{
var result = GetTime(() => GetAllChildren(loop));
return Content(result);
}
private void GetAllChildren(bool loop = false)
{
var test = Umbraco.TypedContent(1085).Children();
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult AllDescendantsFromRoot(bool loop = false)
{
var result = GetTime(() => GetAllDescendants(loop));
return Content(result);
}
private void GetAllDescendants(bool loop = false)
{
var test = Umbraco.TypedContentAtRoot().DescendantsOrSelf("BlogPost");
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult AllByXpathGreedy(bool loop = false)
{
var result = GetTime(() => GetAllXPathGreedy(loop));
return Content(result);
}
private void GetAllXPathGreedy(bool loop = false)
{
var test = Umbraco.TypedContentAtXPath("//BlogPost [@isDoc]");
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult AllByXpathEfficient(bool loop = false)
{
var result = GetTime(() => GetAllXPathEfficient(loop));
return Content(result);
}
private void GetAllXPathEfficient(bool loop = false)
{
var test = Umbraco.TypedContentAtXPath("root/Home [@isDoc]/BlogPostRepository [@isDoc]/BlogPost [@isDoc]");
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult AllByTypedExamine(bool loop = false)
{
var result = GetTime(() => GetTypedExamine(loop));
return Content(result);
}
private void GetTypedExamine(bool loop = false)
{
var criteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria(IndexTypes.Content);
var query = criteria.Field("nodeTypeAlias", "blogPost");
var test = Umbraco.TypedSearch(query.Compile());
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult AllByPureExamine(bool loop = false)
{
var result = GetTime(() => GetPureExamine(loop));
return Content(result);
}
private void GetPureExamine(bool loop =false)
{
var searchCriteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria(IndexTypes.Content);
var query = searchCriteria.Field("nodeTypeAlias", "blogPost");
var test = ExamineManager.Instance.DefaultSearchProvider.Search(query.Compile());
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult AllByContentService(bool loop = false)
{
var result = GetTime(() => GetByContentService(loop));
return Content(result);
}
private void GetByContentService(bool loop = false)
{
var test = Services.ContentService.GetContentOfContentType(1068);
if (loop == true)
{
foreach (var item in test)
{
}
}
}
#endregion
#region latest ten posts
public ActionResult GetLatestBadLinq(bool loop = false)
{
var result = GetTime(() => LatestBadLinq(loop));
return Content(result);
}
private void LatestBadLinq(bool loop = false)
{
var latest = Umbraco.TypedContentAtRoot().First().Descendants().Where(a => a.DocumentTypeAlias == "blogPost").OrderByDescending(a => a.CreateDate).Take(10);
if (loop == true)
{
foreach (var item in latest)
{
}
}
}
public ActionResult GetLatestChildrenFromNode(bool loop = false)
{
var result = GetTime(() => LatestChildrenFromNode(loop));
return Content(result);
}
private void LatestChildrenFromNode(bool loop = false)
{
var latest = Umbraco.TypedContent(1085).Children().OrderByDescending(a => a.CreateDate).Take(10);
if (loop == true)
{
foreach (var item in latest)
{
}
}
}
public ActionResult LatestDescendantsFromRoot(bool loop = false)
{
var result = GetTime(() => GetLatestDescendants(loop));
return Content(result);
}
private void GetLatestDescendants(bool loop = false)
{
var test = Umbraco.TypedContentAtRoot().DescendantsOrSelf("BlogPost").OrderByDescending(a => a.CreateDate).Take(10);
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult LatestByXpathGreedy(bool loop = false)
{
var result = GetTime(() => GetLatestXPathGreedy(loop));
return Content(result);
}
private void GetLatestXPathGreedy(bool loop = false)
{
var test = Umbraco.TypedContentAtXPath("//BlogPost [@isDoc]").OrderByDescending(a => a.CreateDate).Take(10);
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult LatestByXpathEfficient(bool loop = false)
{
var result = GetTime(() => GetLatestXPathEfficient(loop));
return Content(result);
}
private void GetLatestXPathEfficient(bool loop = false)
{
var test = Umbraco.TypedContentAtXPath("root/Home [@isDoc]/BlogPostRepository [@isDoc]/BlogPost [@isDoc]").OrderByDescending(a => a.CreateDate);
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult LatestByTypedExamine(bool loop = false)
{
var result = GetTime(() => GetTypedExamine(loop));
return Content(result);
}
private void LatestTypedExamine(bool loop = false)
{
var criteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria(IndexTypes.Content);
var query = criteria.Field("nodeTypeAlias", "blogPost").And().OrderByDescending("createDate");
var test = Umbraco.TypedSearch(query.Compile()).Take(10);
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult LatestByPureExamine(bool loop = false)
{
var result = GetTime(() => GetLatestPureExamine(loop));
return Content(result);
}
private void GetLatestPureExamine(bool loop = false)
{
var searchCriteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria(IndexTypes.Content);
var query = searchCriteria.Field("nodeTypeAlias", "blogPost").And().OrderByDescending("createDate");
var test = ExamineManager.Instance.DefaultSearchProvider.Search(query.Compile()).Take(10);
if (loop == true)
{
foreach (var item in test)
{
}
}
}
#endregion
#region searches
public ActionResult SearchWithLinq(bool loop = false)
{
var result = GetTime(() => GetSearchLinq(loop));
return Content(result);
}
private void GetSearchLinq(bool loop = false)
{
var test = Umbraco.TypedContentAtRoot().DescendantsOrSelf("BlogPost").Where(a => a.Name.Contains("testing")).OrderByDescending(a => a.CreateDate).Take(10);
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult SearchWitXslt(bool loop = false)
{
var result = GetTime(() => GetSearchXslt(loop));
return Content(result);
}
private void GetSearchXslt(bool loop = false)
{
var test = Umbraco.TypedContentAtXPath("root/Home/BlogPostRepository/BlogPost [@isDoc and contains(@nodeName, 'testing')]").OrderByDescending(a => a.CreateDate).Take(10);
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult SearchWithTypedExamine(bool loop = false)
{
var result = GetTime(() => GetSearchTypedExamine(loop));
return Content(result);
}
private void GetSearchTypedExamine(bool loop = false)
{
var criteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria(IndexTypes.Content);
var query = criteria.Field("nodeTypeAlias", "blogPost").And().Field("nodeName", "testing").And().OrderByDescending("createDate");
var test = Umbraco.TypedSearch(query.Compile()).Take(10);
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult SearchWithPureExamine(bool loop = false)
{
var result = GetTime(() => GetSearchPureExamine(loop));
return Content(result);
}
private void GetSearchPureExamine(bool loop = false)
{
var searchCriteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria(IndexTypes.Content);
var query = searchCriteria.Field("nodeTypeAlias", "blogPost").And().Field("nodeName", "testing").And().OrderByDescending("createDate");
var test = ExamineManager.Instance.DefaultSearchProvider.Search(query.Compile()).Take(10);
if (loop == true)
{
foreach (var item in test)
{
}
}
}
public ActionResult SearchWithPureExamineGetContent(bool loop = false)
{
var result = GetTime(() => GetSeacrchPureExamineGetContent(loop));
return Content(result);
}
private void GetSeacrchPureExamineGetContent(bool loop = false)
{
var searchCriteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria(IndexTypes.Content);
var query = searchCriteria.Field("nodeTypeAlias", "blogPost").And().Field("nodeName", "testing").And().OrderByDescending("createDate");
var test = ExamineManager.Instance.DefaultSearchProvider.Search(query.Compile()).Take(10);
if (loop == true)
{
foreach (var item in test)
{
var content = Umbraco.Ty.TypedContent(item.Id);
}
}
}
#endregion
private string GetTime(Action action)
{
var stopwatch = new Stopwatch();
stopwatch.Start();
action();
stopwatch.Stop();
return stopwatch.Elapsed.TotalMilliseconds.ToString();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment