private void TrackRequestWithObject(ResourceRequestInfo req, Object obj) { if (Object.op_Equality(obj, (Object)null)) { return; } try { req.RecordObject(obj); this.TrackedAllocInfo[req.seqID] = req; this.ExtractObjectResources(obj, req.seqID); if (this._logWriter == null) { return; } this._logWriter.WriteLine(req.ToString()); } catch (Exception ex) { Debug.LogErrorFormat("[ResourceTracker.TrackRequestWithObject] error: {0} \n {1} \n {2}", new object[3] { (object)ex.Message, req == null ? (object)string.Empty : (object)req.ToString(), (object)ex.StackTrace }); } }
private void TrackRequestWithObject(ResourceRequestInfo req, UnityEngine.Object obj) { if (obj == null) { return; } try { req.RecordObject(obj); TrackedAllocInfo[req.seqID] = req; ExtractObjectResources(obj, req.seqID); if (_logWriter != null) { _logWriter.WriteLine(req.ToString()); } } catch (Exception ex) { UnityEngine.Debug.LogErrorFormat("[ResourceTracker.TrackRequestWithObject] error: {0} \n {1} \n {2}", ex.Message, req != null ? req.ToString() : "", ex.StackTrace); } }
public ResourceRequestInfo GetAllocInfo(int instID, string className) { int allocSeqID = -1; if (className == "GameObject") { if (!TrackedGameObjects.TryGetValue(instID, out allocSeqID)) { return(null); } } else if (SceneGraphExtractor.MemCategories.Contains(className)) { if (!TrackedMemObjects.TryGetValue(instID, out allocSeqID)) { return(null); } } ResourceRequestInfo requestInfo = null; if (!TrackedAllocInfo.TryGetValue(allocSeqID, out requestInfo)) { return(null); } return(requestInfo); }
private ResourceRequestInfo NewRequest(string path, StackFrame sf) { ResourceRequestInfo resourceRequestInfo = new ResourceRequestInfo(); resourceRequestInfo.resourcePath = path; resourceRequestInfo.srcFile = sf.GetFileName(); resourceRequestInfo.srcLineNum = sf.GetFileLineNumber(); resourceRequestInfo.seqID = this._reqSeq++; string stackTrace = StackTraceUtility.ExtractStackTrace(); for (int index = 10; index > 0; --index) { string str; if (!this.Stacktraces.TryGetValue(stackTrace.GetHashCode(), out str)) { this.Stacktraces[stackTrace.GetHashCode()] = stackTrace; break; } if (!(stackTrace == str)) { stackTrace += ((int)((double)Random.get_value() * 100.0)).ToString(); } else { break; } } resourceRequestInfo.stacktraceHash = stackTrace.GetHashCode(); return(resourceRequestInfo); }
private IEnumerator LoadDataEnumerator() { //这里要跳两帧才能让登录界面先刷出来同时让用户无法感觉到后台在悄悄加载 if (skip) { yield return(new WaitForEndOfFrame()); yield return(new WaitForEndOfFrame()); } mAnimEffectTemplateList.Clear(); if (Application.isEditor) //编辑器需要逐个加载,因此分帧处理 { List <ResourceRequestInfo> requests = new List <ResourceRequestInfo>(); string[] assetfiles = System.IO.Directory.GetFiles(Application.dataPath + "/Resources/Animation", "*.asset"); foreach (string assetfile in assetfiles) { string assetname = System.IO.Path.GetFileNameWithoutExtension(assetfile); ResourceRequestInfo rri = new ResourceRequestInfo(); rri.name = "Animation/" + assetname; requests.Add(rri); } BatchResourceAsynLoader brl = new BatchResourceAsynLoader(); StartCoroutine(brl.BatchAsynLoad(requests, typeof(AnimationEffect))); while (!brl.finish) { yield return(new WaitForEndOfFrame()); } effect_list = brl.GetResult <AnimationEffect>(); } else //导出的已经打包到Resource包,一并读取并不慢,因此不分帧 { effect_list = Resources.LoadAll <AnimationEffect>("Animation"); } if (skip) { yield return(new WaitForEndOfFrame()); } foreach (AnimationEffect effect in effect_list) { if (mAnimEffectTemplateList.ContainsKey(effect.getID())) { Trace.Warning("the AnimEffect id is already exist!" + effect.getID().ToString()); AnimationEffect conflitEffect = mAnimEffectTemplateList[effect.getID()]; Trace.Warning("Name1:" + conflitEffect.name + " Name2:" + effect.name); continue; } mAnimEffectTemplateList[effect.getID()] = effect; } Trace.Log("Loaded " + mAnimEffectTemplateList.Count.ToString() + " AnimationEffect(s)!"); yield return(true); }
private IEnumerator LoadAnimClipEnumerator() { yield return(new WaitForSeconds(0.1f)); //objs1=Resources.LoadAll("Skin"); if (Application.isEditor) //编辑器需要逐个加载,因此分帧处理 { List <ResourceRequestInfo> requests = new List <ResourceRequestInfo>(); string conpath = Application.dataPath + "/Resources/Controller"; string[] assetfiles = SearchFiles(conpath); foreach (string assetfile in assetfiles) { int t1 = System.Environment.TickCount; string assetname = assetfile.Substring(conpath.Length + 1); assetname = assetname.Substring(0, assetname.Length - 11); assetname = assetname.Replace("\\", "/"); ResourceRequestInfo rri = new ResourceRequestInfo(); rri.name = "Controller/" + assetname; requests.Add(rri); } BatchResourceAsynLoader brl = new BatchResourceAsynLoader(); StartCoroutine(brl.BatchAsynLoad(requests, typeof(Object), 50)); while (!brl.finish) { yield return(new WaitForEndOfFrame()); } objs2 = brl.GetResult <Object>(); } else//导出的已经打包到Resource包,一并读取并不慢,因此不分帧 { objs2 = Resources.LoadAll("Controller"); } Trace.Log("Loaded " + objs2.Length.ToString() + " Controller(s)!"); ////这里预载一定要保证顺序,先Controller,再Skin,否则Skin加载时依赖Controller会重复搞 //while (true) //{ // int t1 = System.Environment.TickCount; // bool ret=SkinManager.PreLoad(); // if (ret == false) // { // break; // } // int t2 = System.Environment.TickCount; // float dt = (t2 - t1) * 0.001f; // if (dt < 0.01f) dt = 0.01f; // yield return new WaitForSeconds(dt);//工作一天(dt),休息1天(dt) //} yield return(true); }
private ResourceRequestInfo NewRequest(string path, StackFrame sf) { ResourceRequestInfo reqInfo = new ResourceRequestInfo(); reqInfo.resourcePath = path; reqInfo.srcFile = sf.GetFileName(); reqInfo.srcLineNum = sf.GetFileLineNumber(); reqInfo.seqID = _reqSeq++; return(reqInfo); }
public string GetStackTrace(ResourceRequestInfo req) { string stacktrace; if (!Stacktraces.TryGetValue(req.stacktraceHash, out stacktrace)) { return(""); } return(stacktrace); }
public void TrackResourcesDotLoad(Object loaded, string path) { if (!this._enableTracking) { return; } StackFrame sf = new StackFrame(1, true); ResourceRequestInfo req = this.NewRequest(path, sf); req.requestType = ResourceRequestType.Ordinary; this.TrackRequestWithObject(req, loaded); }
public ResourceRequestInfo GetAllocInfo(int instID) { if (!this._enableTracking) { return((ResourceRequestInfo)null); } int key = -1; if (!this.TrackedGameObjects.TryGetValue(instID, out key) && !this.TrackedMemObjects.TryGetValue(instID, out key)) { return((ResourceRequestInfo)null); } ResourceRequestInfo resourceRequestInfo = (ResourceRequestInfo)null; return(!this.TrackedAllocInfo.TryGetValue(key, out resourceRequestInfo) ? (ResourceRequestInfo)null : resourceRequestInfo); }
/// <summary> /// 审核 /// </summary> /// <param name="RequestID"></param> /// <param name="Conclusion"></param> /// <param name="Content"></param> /// <returns></returns> public string ResourceRequestApprove(int RequestID, int Status, int Conclusion, string Content, int UserID, string UserName, int NextUserID, string NextUserName) { try { ResourceRequestWF workflow = new ResourceRequestWF(); workflow.Approve(RequestID, Status, UserID, UserName, NextUserID, NextUserName, Content, Conclusion); ResourceRequestInfo resource = SqlMapDAL.CreateNameQuery("GetMyResourceInfo").SetParameter("RequestID", RequestID).Entity <ResourceRequestInfo>(); var obj = new { result = "success", message = "操作成功", Title = resource.Title }; return(JsonConvert.SerializeObject(obj)); } catch (Exception ex) { var obj = new { result = "fail", message = ex.Message }; return(JsonConvert.SerializeObject(obj)); } }
private string GetSelectedDebugInfo() { var obj = _selectedThing as NativeUnityEngineObject; if (ResourceTracker.Instance == null || obj == null) { return(""); } ResourceRequestInfo requestInfo = ResourceTracker.Instance.GetAllocInfo(obj.instanceID, obj.className); if (requestInfo == null) { return(""); } return(requestInfo.ToString()); }
private string GetSelectedDebugInfo() { var obj = _selectedThing as NativeUnityEngineObject; if (obj == null || ResourceTracker.Instance == null || !ResourceTracker.Instance.EnableTracking) { return(""); } ResourceRequestInfo requestInfo = ResourceTracker.Instance.GetAllocInfo(obj.instanceID, obj.className); if (requestInfo == null) { return(""); } return(string.Format("{0}\n\nStackTrace:\n{1}", requestInfo.ToString(), ResourceTracker.Instance.GetStackTrace(requestInfo))); }
public bool NetHandle_RequestStackData(eNetCmd cmd, UsCmd c) { int instID = c.ReadInt32(); string str = c.ReadString(); Debug.Log((object)string.Format("NetHandle_RequestStackData instanceID={0} className={1}", (object)instID, (object)str)); ResourceRequestInfo allocInfo = ResourceTracker.Instance.GetAllocInfo(instID); UsCmd cmd1 = new UsCmd(); cmd1.WriteNetCmd(eNetCmd.SV_QueryStacksResponse); if (allocInfo == null) { cmd1.WriteString("<no_callstack_available>"); } else { cmd1.WriteString(ResourceTracker.Instance.GetStackTrace(allocInfo)); } UsNet.Instance.SendCommand(cmd1); return(true); }
private ResourceRequestInfo NewRequest(string path, StackFrame sf) { ResourceRequestInfo reqInfo = new ResourceRequestInfo(); reqInfo.resourcePath = path; reqInfo.srcFile = sf.GetFileName(); reqInfo.srcLineNum = sf.GetFileLineNumber(); reqInfo.seqID = _reqSeq++; string stacktrace = UnityEngine.StackTraceUtility.ExtractStackTrace(); int _tryCount = 10; while (_tryCount > 0) { string stacktraceStored; if (!Stacktraces.TryGetValue(stacktrace.GetHashCode(), out stacktraceStored)) { Stacktraces[stacktrace.GetHashCode()] = stacktrace; break; } else { if (stacktrace == stacktraceStored) { break; } else { // collision happens! stacktrace += ((int)(UnityEngine.Random.value * 100)).ToString(); } } _tryCount--; } reqInfo.stacktraceHash = stacktrace.GetHashCode(); return(reqInfo); }
public ResourceRequestInfo GetAllocInfo(int instID) { if (!_enableTracking) { return(null); } int allocSeqID = -1; if (!TrackedGameObjects.TryGetValue(instID, out allocSeqID) && !TrackedMemObjects.TryGetValue(instID, out allocSeqID)) { return(null); } ResourceRequestInfo requestInfo = null; if (!TrackedAllocInfo.TryGetValue(allocSeqID, out requestInfo)) { return(null); } return(requestInfo); }
public bool NetHandle_RequestStackData(eNetCmd cmd, UsCmd c) { int instanceID = c.ReadInt32(); string className = c.ReadString(); UnityEngine.Debug.Log(string.Format("NetHandle_RequestStackData instanceID={0} className={1}", instanceID, className)); ResourceRequestInfo requestInfo = ResourceTracker.Instance.GetAllocInfo(instanceID); UsCmd pkt = new UsCmd(); pkt.WriteNetCmd(eNetCmd.SV_QueryStacksResponse); if (requestInfo == null) { pkt.WriteString("<no_callstack_available>"); } else { pkt.WriteString(ResourceTracker.Instance.GetStackTrace(requestInfo)); } UsNet.Instance.SendCommand(pkt); return(true); }
/// <summary> /// 审核(通过、打回都在此处理) /// </summary> /// <param name="RefID"></param> /// <param name="userID"></param> /// <param name="userName"></param> /// <param name="Content"></param> /// <param name="Conclusion"></param> /// <param name="RefIDType"></param> /// <returns></returns> public override bool Approve(long RefID, int Status, int userID, string userName, int nextUserID, string nextUserName, string Content = "", int Conclusion = 0, int RefIDType = 0) { ResourceRequestInfo resource = SqlMapDAL.CreateNameQuery("GetMyResourceInfo").SetParameter("RequestID", RefID).Entity <ResourceRequestInfo>(); if (resource == null || resource.Status != Status) { return(false); } ProcessStepEntityInfo currentStep = base.GetCurrentStepByRefID(RefID, "资源申请业务流程"); if (currentStep != null) { try { int RequestUserType = GetRequestUserType(resource.RequestByID);////审核申请,当前用户不一定是申请人,要用任务的申请人 //上一步骤,下一步骤 ProcessStepEntityInfo prevStep = GetProcessStep(currentStep.ProcessEntityID, currentStep.StepNum - 1); ProcessStepEntityInfo nextStep = GetProcessStep(currentStep.ProcessEntityID, currentStep.StepNum + 1); int nextStatus = resource.Status + (Conclusion == 1 ? 1 : -1); switch (RequestUserType) { case 1: if (currentStep.StepNum == 1) { // 所内用户提交请求,自动进行1,2,3步骤 base.SetApprove(currentStep, RefID, userID, userName, 0, "", Content, Conclusion, RefIDType); base.SetApprove(nextStep, RefID, userID, userName, 0, "", "所内用户申请,自动通过审批", Conclusion, RefIDType); nextStep = GetProcessStep(currentStep.ProcessEntityID, currentStep.StepNum + 2); base.SetApprove(nextStep, RefID, userID, userName, nextUserID, nextUserName, "所内用户申请,自动通过审批", Conclusion, RefIDType); nextStatus = 3; } else if (currentStep.StepNum == 4 && Conclusion == 0) { // 所内用户请求中心主任分派步骤打回,直接打回至请求用户(即作废请求) base.SetApprove(currentStep, RefID, userID, userName, 0, "", Content, Conclusion, RefIDType); prevStep = null; nextStatus = 0; } else if (currentStep.StepNum == 6 && Conclusion == 1) { // 所内用户请求中心主任审核步骤通过,直接通过至请求人 base.SetApprove(currentStep, RefID, userID, userName, 0, "", Content, Conclusion, RefIDType); base.SetApprove(nextStep, RefID, userID, userName, 0, "", "所内用户申请,自动通过审批", Conclusion, RefIDType); nextStep = GetProcessStep(currentStep.ProcessEntityID, currentStep.StepNum + 2); base.SetApprove(nextStep, RefID, userID, userName, nextUserID, nextUserName, "所内用户申请,自动通过审批", Conclusion, RefIDType); nextStep = null; nextStatus = 8; } else { base.SetApprove(currentStep, RefID, userID, userName, nextUserID, nextUserName, Content, Conclusion, RefIDType); } break; case 2: if (currentStep.StepNum == 1) { // 科技厅系统内用户,自动进行1,2步骤 base.SetApprove(currentStep, RefID, userID, userName, 0, "", Content, Conclusion, RefIDType); base.SetApprove(nextStep, RefID, userID, userName, nextUserID, nextUserName, "厅系统内部用户申请,自动通过审批", Conclusion, RefIDType); nextStatus = 2; } else if (currentStep.StepNum == 3 && Conclusion == 0) { // 科技厅系统内用户请求所领导分发步骤打回,直接打回至请求用户 base.SetApprove(currentStep, RefID, userID, userName, 0, "", Content, Conclusion, RefIDType); prevStep = null; nextStatus = 0; } else if (currentStep.StepNum == 7 && Conclusion == 1) { // 科技厅系统内用户请求所领导审核步骤通过,直接通过至请求人 base.SetApprove(currentStep, RefID, userID, userName, 0, "", Content, Conclusion, RefIDType); base.SetApprove(prevStep, RefID, userID, userName, nextUserID, nextUserName, "厅系统内部用户申请,自动通过审批", Conclusion, RefIDType); nextStep = null; nextStatus = 8; } else { base.SetApprove(currentStep, RefID, userID, userName, nextUserID, nextUserName, Content, Conclusion, RefIDType); } break; case 3: // 普通外部用户 base.SetApprove(currentStep, RefID, userID, userName, nextUserID, nextUserName, Content, Conclusion, RefIDType); break; default: // 普通外部用户 base.SetApprove(currentStep, RefID, userID, userName, nextUserID, nextUserName, Content, Conclusion, RefIDType); break; } // 更新单据状态 UpdateRequestStatus(RefID, nextStatus); #region 发送通知 int reciever; string message; if (Conclusion == 1) { if (nextStep != null) { // 通过,通知下一步执行人 reciever = nextUserID; message = "有新的资源请求【" + resource.Title + "】,请及时处理。"; MessageBLL.SendTask(userID, reciever.ToString(), message, "/RS/Resource/ResourceTaskList"); } else { // 归档,通知资源申请人 reciever = resource.RequestByID; message = "您的资源请求【" + resource.Title + "】已完成,请下载查看。"; MessageBLL.SendMessage(userID, reciever.ToString(), message, "/RS/Resource/ResourceList"); } } else { if (prevStep != null) { // 打回,通知上一步执行人 reciever = prevStep.ExecutiveByID; message = "资源请求【" + resource.Title + "】被打回,请及时处理"; MessageBLL.SendTask(userID, reciever.ToString(), message, "/RS/Resource/ResourceTaskList"); } else { // 打回,通知资源申请人 reciever = resource.RequestByID; message = "您的资源请求【" + resource.Title + "】被驳回,请知悉。"; MessageBLL.SendMessage(userID, reciever.ToString(), message, "/RS/Resource/ResourceTaskList"); } } #endregion return(true); } catch (Exception e) { LogUtility.WriteLog("审核操作失败:" + e.Message); return(false); } } return(true); }
public static void FillScopesValue(IDictionary<string, string> commun, string lang, IEnumerable<string> requestedScopes, bool cacheTranslations) { // Ensure scopes part resources // Dont cache this, variable with the query string var scopeValues = GetPartResources(lang, VLConstants.LocalizationParts.Scopes_Part); var scopeNames = requestedScopes as string[] ?? requestedScopes.ToArray(); if (scopeValues != null) { foreach (var scopeValue in scopeValues) { var scopeName = GetScopeNameFromResource(scopeValue.Key); if (!scopeNames.Contains(scopeName)) continue; var key = Scopes_RosourcePrefix + scopeValue.Key; commun.Add(key, scopeValue.Value); } } if (OptionsState.Current.Options.LocalizationServiceOptions.ScopeLocalizationRequest != null) { var resourceRequestInfo = new ResourceRequestInfo { Part = VLConstants.LocalizationParts.Scopes_Part, Lang = lang, CacheTranslations = cacheTranslations, RequestedScopes = scopeNames }; var userScopesLocalizations = OptionsState.Current.Options.LocalizationServiceOptions.ScopeLocalizationRequest(resourceRequestInfo); if(userScopesLocalizations == null) return; var scopeTranslation = userScopesLocalizations.GetTranslation(lang, scopeNames); if (scopeTranslation != null) { foreach (var locale in scopeTranslation) { if (!string.IsNullOrWhiteSpace(locale.DisplayName)) { var displayNameKey = Scopes_RosourcePrefix + locale.ScopeName + ScopeDisplayNameSuffix; commun[displayNameKey] = locale.DisplayName; } if (!string.IsNullOrWhiteSpace(locale.Description)) { var descriptionKey = Scopes_RosourcePrefix + locale.ScopeName + ScopeDescriptionSuffix; commun[descriptionKey] = locale.Description; } } } } }
public IEnumerator BatchAsynLoad(List <ResourceRequestInfo> requests, System.Type t, int batchnumber = 100) { objs = new List <Object>(); float totalbegintime = Time.time; finish = false; Queue <ResourceRequestInfo> unprocessqueue = new Queue <ResourceRequestInfo>(); for (int k = 0; k < requests.Count; k++) { ResourceRequestInfo rri = requests[k]; unprocessqueue.Enqueue(rri); } Dictionary <ResourceRequestInfo, bool> processingqueue = new Dictionary <ResourceRequestInfo, bool>(); Queue <ResourceRequestInfo> donequeue = new Queue <ResourceRequestInfo>(); Queue <ResourceRequestInfo> finishqueue = new Queue <ResourceRequestInfo>(); while (unprocessqueue.Count > 0 || processingqueue.Count > 0 || finishqueue.Count < requests.Count) { float curtime = Time.time; while (processingqueue.Count < batchnumber && unprocessqueue.Count > 0) { ResourceRequestInfo rri = unprocessqueue.Dequeue(); rri.rr = Resources.LoadAsync(rri.name, t); rri.begintime = curtime; processingqueue[rri] = true; } donequeue.Clear(); foreach (KeyValuePair <ResourceRequestInfo, bool> keypair in processingqueue) { ResourceRequestInfo rri = keypair.Key; if (rri.rr.isDone) { Object asset = (Object)rri.rr.asset;//Resources.Load<LightingEffect>("Effect/" + assetname); if (asset != null) { objs.Add(asset); } donequeue.Enqueue(rri); } else if (curtime - rri.begintime > 600.0f) { Trace.LogWarning("BatchResourceAsynLoader overtime resouce=" + rri.name); donequeue.Enqueue(rri); } } foreach (ResourceRequestInfo rri in donequeue) { processingqueue.Remove(rri); finishqueue.Enqueue(rri); } donequeue.Clear(); //Debug.Log("unprocessqueue=" + unprocessqueue.Count.ToString() + ",processingqueue=" + processingqueue.Count.ToString() + ",finishqueue=" + finishqueue.Count.ToString() + "/" + requests.Count.ToString()); yield return(new WaitForEndOfFrame()); } float totalfinishtime = Time.time; float totaldeltatime = totalfinishtime - totalbegintime; Trace.Log("BatchAsynLoad finish, cost time=" + totaldeltatime.ToString() + ",finishnumber=" + finishqueue.Count.ToString()); finish = true; }
public string GetStackTrace(ResourceRequestInfo req) { string str; return(!this.Stacktraces.TryGetValue(req.stacktraceHash, out str) ? string.Empty : str); }
public bool NetHandle_RequestStackSummary(eNetCmd cmd, UsCmd c) { string flag = c.ReadString(); if (string.IsNullOrEmpty(flag)) { return(false); } if (flag.Equals("begin")) { _stackUnavailableDict.Clear(); return(true); } if (flag.Equals("end")) { UnityEngine.Debug.Log("Stack Category Statistical Information:"); //NetUtil.Log("堆栈类型统计信息:"); int totalCount = 0; int unavailableTotalCount = 0; int totalSize = 0; int unavailableTotalSize = 0; int categoryCount = c.ReadInt32(); for (int i = 0; i < categoryCount; i++) { string category = c.ReadString(); List <stackParamater> unavailableList; _stackUnavailableDict.TryGetValue(category, out unavailableList); if (unavailableList != null) { int CategoryCount = c.ReadInt32(); int CategorySize = c.ReadInt32(); totalCount += CategoryCount; totalSize += CategorySize; unavailableTotalCount += unavailableList.Count; int categoryTotalSize = 0; foreach (var info in unavailableList) { categoryTotalSize += info.Size; } unavailableTotalSize += categoryTotalSize; UnityEngine.Debug.Log(string.Format("[{0} =({1}/{2},{3}/{4})]", category, unavailableList.Count, CategoryCount, ResourceTrackerConst.FormatBytes(categoryTotalSize), ResourceTrackerConst.FormatBytes(CategorySize))); //NetUtil.Log("【{0} =({1}/{2},{3}/{4})】", category, unavailableList.Count, CategoryCount, ResourceTrackerConst.FormatBytes(categoryTotalSize), ResourceTrackerConst.FormatBytes(CategorySize)); } } UnityEngine.Debug.Log(string.Format("[total =({0}/{1},{2}/{3})]", unavailableTotalCount, totalCount, ResourceTrackerConst.FormatBytes(unavailableTotalSize), ResourceTrackerConst.FormatBytes(totalSize))); //NetUtil.Log("【total =({0}/{1},{2}/{3})】", unavailableTotalCount, totalCount, ResourceTrackerConst.FormatBytes(unavailableTotalSize), ResourceTrackerConst.FormatBytes(totalSize)); return(true); } string className = flag; int count = c.ReadInt32(); for (int i = 0; i < count; i++) { int instanceID = c.ReadInt32(); int size = c.ReadInt32(); ResourceRequestInfo requestInfo = ResourceTracker.Instance.GetAllocInfo(instanceID); if (requestInfo == null) { if (!_stackUnavailableDict.ContainsKey(className)) { _stackUnavailableDict.Add(className, new List <stackParamater>()); } List <stackParamater> stackUnavailableList; _stackUnavailableDict.TryGetValue(className, out stackUnavailableList); stackParamater info = new stackParamater(); info.InstanceID = instanceID; info.Size = size; stackUnavailableList.Add(info); } } return(true); }